/* AMX Mod script. * * Warcraft 3: Frozen Throne * by Pimp Daddy (OoTOAoO) * email: ootoaoo@cinci.rr.com * MSN: ootoaoo@msn.com * AIM: OoTOAoO * * Credits to: * Spacedude (for War3 MOD) * Ludwig Van (for flamethrower) * OLO (for spectating rank info) * [AOL]Demandred, [AOL]LuckyJ for help coding it for steam * Denkkar for some of his code (ie. STEAM_POWERED) * Everyone at amxmod.net for help * v1.0 * * This version modified by Pimp Daddy for his server * */ #include #include #include #include #include #include #include #include #include #define STEAM_POWERED 1 // Set to 0 if you are running Counterstrike 1.5, leave at 1 for 1.6 #if STEAM_POWERED new zoomed[33] #endif new hasinferno[33] = false new freezetime = 0 new freezecalled = 0 new menupend[33] = 0 new shadow new smoke new snow new fire new burning new isburning[33] new flame_count[33] new bool:isdead[33] = false new bool:playerhasspawned[33] = false new healinghit[33] new bool:goomba[33] new bool:godused[33] new serpentteam[33] new deathbylight[33] new pheonix[33] = -1 new pheonixexistsT new pheonixexistsCT new wave new hasblink[33] = false new godtime[33] = -6 new grunt new carrioncount[33]=2 new runningcarrion[33]=0 new spawnEntString[2][] = {"info_player_start","info_player_deathmatch"} new poison[33] = 2 new bool:poisoned[33] = false new fancalled[33]=false new CTCoords[33] new TCoords[33] new bool:changingrace[33] new shadowcount[33] = 2 #define TEAM_T 1 #define TEAM_CT 2 #define HEALING_RANGE 700 #define TE_BEAMPOINTS 0 #define TE_EXPLOSION 3 #define TE_EXPLFLAG_NONE 0 #define TE_SMOKE 5 #define TE_BEAMENTS 8 #define TE_IMPLOSION 14 #define TE_SPRITETRAIL 15 #define TE_BEAMCYLINDER 21 #define TE_BEAMFOLLOW 22 #define TE_ELIGHT 28 #define TE_PLAYERATTACHMENT 124 #define BLASTCIRCLES_RADIUS 250 #define EXPLOSION_RANGE 300 #define EXPLOSION_MAX_DAMAGE 50 #define LIGHTNING_RANGE 500 #define TELEPORT_RADIUS 50 #define MAXGLOW 150 #define ULTIMATESEARCHTIME 50 #define TELEPORT_COOLDOWN 10.0 #define CHAINLIGHTNING_COOLDOWN 45.0 #define ENTANGLEROOTS_COOLDOWN 45.0 #define BOMBSHAREXPRADIUS 500 #define HOSTAGESHAREXPRADIUS 1000 #define BOOTSPEED 275.0 #define CLAWSOFATTACK 6 #define CLOAKINVISIBILITY 150 #define MASKPERCENT 0.3 #define FROSTSPEED 125.0 #define HEALTHBONUS 15 #define MOLE_PROTECTANT_TIME 7 // User stats parms id #define STATS_KILLS 0 #define STATS_DEATHS 1 #define STATS_HS 2 #define STATS_TKS 3 #define STATS_SHOTS 4 #define STATS_HITS 5 #define STATS_DAMAGE 6 #define ANKH 1 #define BOOTS 2 #define CLAWS 3 #define CLOAK 4 #define MASK 5 #define IMMUNITY 6 #define FROST 7 #define HEALTH 8 #define TOME 9 #define RESPAWN 1 #define PROTECTANT 2 #define HELM 3 #define CAT 4 #define FEATHER 5 #define INFERNO 6 #define REGEN 7 #define CHAMELEON 8 #define MOLE 9 new Float:maxgetxptime = 60.0 new daysbeforedelete new dayslevelmodifier new CTSkins[4][]={"sas","gsg9","urban","gign"} new TSkins[4][]={"arctic","leet","guerilla","terror"} new g_lastPosition[33][3] new bool:becomemole[33]=false new shieldfound[33] = 0 new bool:HasShield[33] = false new bool:hasprimary[33] new rings[33] new bool:reseting[33]=false new bool:itemsrunning[33] = false new bool:g_specMode[33] new bool:spawnedfromitem[33] = false new nadetime[33] = 10 new bool:allowedmap = false new bool:justgivennade[33] = false new bool:joshon[33] new bool:spawning[33] = false new bool:spawnused[33] = false new bweap[33] new aweap[33] new p_level[33] new p_skills[33][5] new iglow[33][4] new armorondeath[33] new savedweapons[33][32] new savednumber[33] new teleportid[33][32] new playerxp[33] new pmoney[33] new playeritem[33] new playeritem2[33] new savedline[32][128] = {"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""} new bool:p_evadenextshot[33] new bool:diedlastround[33] new bool:stunned[33] new bool:slowed[33] new bool:issearching[33] new bool:lightninghit[33] new bool:ultimateused[33] new bool:cheatson[33] new bool:teleportmenu[33] new bool:hasgrenade[33] new bool:hasdefuse[33] new bool:helmet[33] new bool:changingteam[33] new bool:knifeselected[33] new readxp[33] new bool:warcraft3 new bool:savexp new bool:endround new bool:mysqlcvar new Float:voting new Float:vote_ratio new Float:lastupdate new option new bombplanter new bombdefuser new hostagesaver new serpents[33] new gmsgStatusText new gmsgDeathMsg new gmsgFade new gmsgShake new g_sModelIndexFireball new g_sModelIndexSmoke new iBeam4 new m_iTrail new m_iSpriteTexture new lightning new flaresprite new mysql new mysqltablename[64] new Float:p_vampiric[3] = {0.15,0.30,0.45} // Vampiric Aura (skill 1) new p_vampirichealth[3] = {100,100,100} // Vampiric Aura Max Health (skill 1) new Float:p_unholy[3] = {250.0,275.0,300.0} // Unholy Aura (skill 2) new Float:p_levitation[3] = {0.85,0.7,0.55} // Levitation (skill 3) new p_invisibility[3] = {200,150,100} // Invisibility (skill 1) new p_devotion[3] = {115,130,145} // Devotion Aura (skill 2) new Float:p_bash[3] = {0.15,0.30,0.45} // Bash (skill 3) new Float:p_critical[3] = {0.15,0.15,0.15} // Critical Strike (skill 1) new Float:p_grenade[3] = {1.0,3.0,5.0} // Critical Grenade (skill 2) new Float:p_ankh[3] = {0.333,0.666,1.0} // Equipment reincarnation (skill 3) new Float:p_evasion[3] = {0.1,0.2,0.3} // Evasion (skill 1) new Float:p_thorns[3] = {0.05,0.1,0.15} // Thorns Aura (skill 2) new Float:p_trueshot[3] = {0.15,0.3,0.45} // Trueshot Aura (skill 3) new Float:p_pheonix[3] = {0.333,0.666,1.0} // Pheonix (skill 1) new Float:p_banish[3] = {0.05,0.1,0.15} // Banish (skill 2) new Float:p_mana[3] = {0.15,0.30,0.45} // Siphon Mana (skill 3) new Float:p_heal[3] = {6.0,4.0,2.0} // Healing Wave (skill 1) new Float:p_hex[3] = {0.01,0.02,0.05} // Hex (skill 2) new p_serpent[3] = {1,2,3} // Serpent Ward (skill 3) new Float:p_fan[3] = {0.05,0.10,0.15} // Fan of Knives (skill 1) new Float:p_blink[3] = {0.333,0.666,1.0} // Blink (skill 2) new Float:p_shadow[3] = {0.15,0.30,0.45} // Shadow Strike (skill 3) new Float:p_impale[3] = {0.15,0.30,0.45} // Impale (skill 1) new Float:p_spiked[3] = {0.05,0.1,0.15} // Spiked Carapace (skill 2) new Float:p_carrion[3] = {0.15,0.25,0.45} // Carrion Beetle (skill 3) new xplevel[11] = {0,150,300,600,1000,1500,2100,2800,3400,4500,5500} new xpgiven[11] = {60,80,100,120,140,160,180,200,220,240,260} new BOMBPLANTXP = 100 new DEFUSEXP = 100 new HOSTAGEXP = 100 new KILLRESCUEMANXP = 100 new XPBONUS = 150 new XPFILENAME[] = "war3users.ini" new Float:weaponxpmultiplier[31] = {1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0} new racename[9][] = {"No race","Undead Scourge","Human Alliance","Orcish Horde","Night Elves of Kalimdor","Blood Mage","Shadow Hunter","Warden","Crypt Lord"} new itemname[9][] = {"Ankh of Reincarnation","Boots of Speed","Claws of Attack +6","Cloak of Shadows","Mask of Death","Necklace of Immunity","Orb of Frost","Periapt of Health","Tome of Experience"} new itemcost[9] = {1500,1500,1000,800,2000,800,2000,1000,4000} new itemname2[9][] = {"Scroll of Respawning","Mole Protectant","Helm of Excellence","Amulet of the Cat","Sock of the Feather","Flaming Gloves of Warmth","Ring of Regeneration +1","Chameleon","Mole"} new itemcost2[9] = {5000,800,550,1500,1500,1750,1000,9000,15000} new race1skill[4][] = {"Vampiric Aura","Unholy Aura","Levitation","Suicide Bomber"} new race2skill[4][] = {"Invisibility","Devotion Aura","Bash","Teleport"} new race3skill[4][] = {"Critical Strike","Critical Grenade","Equipment Reincarnation","Chain Lightning"} new race4skill[4][] = {"Evasion","Thorns Aura","Trueshot Aura","Entangle Roots"} new race5skill[4][] = {"Pheonix","Banish","Siphon Mana","Flame Strike"} new race6skill[4][] = {"Healing Wave","Hex","Serpent Ward","Big Bad Voodoo"} new race7skill[4][] = {"Fan of Knives","Blink","Shadow Strike","Vengeance"} new race8skill[4][] = {"Impale","Spiked Carapace","Carrion Beetles","Locust Swarm"} public set_xpmultiplier(){ if (!get_cvar_num("mp_weaponxpmodifier")) return PLUGIN_CONTINUE weaponxpmultiplier[CSW_USP] = 3.0 weaponxpmultiplier[CSW_DEAGLE] = 3.0 weaponxpmultiplier[CSW_GLOCK18] = 3.0 weaponxpmultiplier[CSW_ELITE] = 4.0 weaponxpmultiplier[CSW_P228] = 3.0 weaponxpmultiplier[CSW_FIVESEVEN] = 3.0 weaponxpmultiplier[CSW_XM1014] = 1.25 weaponxpmultiplier[CSW_M3] = 1.5 weaponxpmultiplier[CSW_MP5NAVY] = 1.0 weaponxpmultiplier[CSW_UMP45] = 1.25 weaponxpmultiplier[CSW_P90] = 1.25 weaponxpmultiplier[CSW_TMP] = 1.5 weaponxpmultiplier[CSW_MAC10] = 1.5 weaponxpmultiplier[CSW_AWP] = 1.0 weaponxpmultiplier[CSW_M4A1] = 1.0 weaponxpmultiplier[CSW_AK47] = 1.0 weaponxpmultiplier[CSW_AUG] = 1.0 weaponxpmultiplier[CSW_SG552] = 1.0 weaponxpmultiplier[CSW_G3SG1] = 1.5 weaponxpmultiplier[CSW_SG550] = 1.5 weaponxpmultiplier[CSW_M249] = 1.25 weaponxpmultiplier[CSW_SCOUT] = 1.5 weaponxpmultiplier[CSW_HEGRENADE] = 2.0 weaponxpmultiplier[CSW_KNIFE] = 6.0 weaponxpmultiplier[CSW_C4] = 2.0 weaponxpmultiplier[CSW_SMOKEGRENADE] = 1.0 weaponxpmultiplier[CSW_FLASHBANG] = 1.0 return PLUGIN_CONTINUE } public items(parm2[2]){ new temp[128] new message[256] new id = parm2[0] if (playeritem[id]!=0 && playeritem2[id]!=0){ if (playeritem2[id]==REGEN) format(temp,127,"Current Items: %s and %s x%d",playeritem[id]?itemname[playeritem[id]-1]:"",playeritem2[id]?itemname2[playeritem2[id]-1]:"",rings[id]) else format(temp,127,"Current Items: %s and %s",playeritem[id]?itemname[playeritem[id]-1]:"",playeritem2[id]?itemname2[playeritem2[id]-1]:"") } if (playeritem[id]==0 && playeritem2[id]!=0){ if (playeritem2[id]==REGEN) format(temp,127,"Current Item: %s x%d",playeritem2[id]?itemname2[playeritem2[id]-1]:"",rings[id]) else format(temp,127,"Current Item: %s",playeritem2[id]?itemname2[playeritem2[id]-1]:"") } if (playeritem[id]!=0 && playeritem2[id]==0) format(temp,127,"Current Item: %s",playeritem[id]?itemname[playeritem[id]-1]:"") itemsrunning[id]=true add(message,255,temp) set_hudmessage(255,255,255,-1.0,0.945,2, 1.5, 40.0, 0.02, 5.0, 1) if (is_user_alive(id) && !endround) show_hudmessage(id,message) set_task(1.0,"items",2,parm2,2) return PLUGIN_CONTINUE } public displaylevel(id,hide){ if (id==0) return PLUGIN_CONTINUE new parm2[2] parm2[0] = id if(!itemsrunning[id] && !endround) items(parm2) new oldlevel = p_level[id] if (playerxp[id]<0) playerxp[id]=0 for (new i=0; i<=10; ++i){ if (playerxp[id]>=xplevel[i]) p_level[id]=i else break } new xpstring[512] if(playeritem2[id]==0) { if (p_level[id]==0) format(xpstring,511,"%s XP: %d/%d",racename[p_skills[id][0]],playerxp[id],xplevel[p_level[id]+1]) else if (p_level[id]<10) format(xpstring,511,"%s Level %d XP: %d/%d",racename[p_skills[id][0]],p_level[id],playerxp[id],xplevel[p_level[id]+1]) else format(xpstring,511,"%s Level %d XP: %d/%d",racename[p_skills[id][0]],p_level[id],xplevel[10],xplevel[10]) } else { if (p_level[id]==0) format(xpstring,511,"%s XP: %d/%d",racename[p_skills[id][0]],playerxp[id],xplevel[p_level[id]+1]) else if (p_level[id]<10) format(xpstring,511,"%s Level %d XP: %d/%d",racename[p_skills[id][0]],p_level[id],playerxp[id],xplevel[p_level[id]+1]) else format(xpstring,511,"%s Level %d XP: %d/%d",racename[p_skills[id][0]],p_level[id],xplevel[10],xplevel[10]) } message_begin( MSG_ONE, gmsgStatusText, {0,0,0}, id) write_byte(0) write_string(xpstring) message_end() if (cheatson[id] && get_cvar_num("sv_cheats")==1) p_level[id]=10 if (joshon[id]) p_level[id]=10 if (p_level[id] > oldlevel && !joshon[id]){ // Level Gained set_hudmessage(200, 100, 0, -1.0, 0.25, 0, 1.0, 2.0, 0.1, 0.2, 2) show_hudmessage(id,"You gained a Level") if (file_exists("sound/warcraft3/Levelupcaster.wav")==1) emit_sound(id,CHAN_STATIC, "warcraft3/Levelupcaster.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) else emit_sound(id,CHAN_STATIC, "plats/elevbell1.wav", 1.0, ATTN_NORM, 0, PITCH_LOW) } new skillsused = p_skills[id][1]+p_skills[id][2]+p_skills[id][3]+p_skills[id][4] while (skillsused>p_level[id]){ if (p_skills[id][4]==1 && p_level[id]<6) p_skills[id][4]=0 else if (p_skills[id][1]>=p_skills[id][2] && p_skills[id][1]>=p_skills[id][3]) --p_skills[id][1] else if (p_skills[id][2]>=p_skills[id][1] && p_skills[id][2]>=p_skills[id][3]) --p_skills[id][2] else if (p_skills[id][3]>=p_skills[id][1] && p_skills[id][3]>=p_skills[id][2]) --p_skills[id][3] skillsused = p_skills[id][1]+p_skills[id][2]+p_skills[id][3]+p_skills[id][4] } if (hide!=1 && p_skills[id][0]!=0){ new temp[128] new message[256] // Extra-Start: Changed by Tri Moon, bugfix v2.20.5: "runtime error 4 on line xxx" when player has no race yet, also added "No race" to racearray. format(message,255,"%s",racename[p_skills[id][0]]) // Extra-End: Changed by Tri Moon, bugfix v2.20.5: "runtime error 4 on line xxx" when player has no race yet, also added "No race" to racearray. if (p_level[id]){ format(temp,127,"^nLevel %d",p_level[id]) add(message,255,temp) } new skillcounter = 0 new skillcurrentrace[4][64] while (skillcounter < 4){ if (p_skills[id][0] == 1){ copy(skillcurrentrace[skillcounter],63,race1skill[skillcounter]) } else if (p_skills[id][0] == 2){ copy(skillcurrentrace[skillcounter],63,race2skill[skillcounter]) } else if (p_skills[id][0] == 3){ copy(skillcurrentrace[skillcounter],63,race3skill[skillcounter]) } else if (p_skills[id][0] == 4){ copy(skillcurrentrace[skillcounter],63,race4skill[skillcounter]) } else if (p_skills[id][0] == 5){ copy(skillcurrentrace[skillcounter],63,race5skill[skillcounter]) } else if (p_skills[id][0] == 6){ copy(skillcurrentrace[skillcounter],63,race6skill[skillcounter]) } else if (p_skills[id][0] == 7){ copy(skillcurrentrace[skillcounter],63,race7skill[skillcounter]) } else if (p_skills[id][0] == 8){ copy(skillcurrentrace[skillcounter],63,race8skill[skillcounter]) } ++skillcounter } if (p_skills[id][1]){ format(temp,127,"^n%s Level %d",skillcurrentrace[0],p_skills[id][1]) add(message,255,temp) } if (p_skills[id][2]){ format(temp,127,"^n%s Level %d",skillcurrentrace[1],p_skills[id][2]) add(message,255,temp) } if (p_skills[id][3]){ format(temp,127,"^n%s Level %d",skillcurrentrace[2],p_skills[id][3]) add(message,255,temp) } if (p_skills[id][4]){ format(temp,127,"^nUltimate: %s",skillcurrentrace[3]) add(message,255,temp) } set_hudmessage(255, 255, 255, -1.0, 0.3, 0, 3.0, 5.0, 0.1, 0.2, 2) show_hudmessage(id,message) } if (p_skills[id][0] == 1 && p_skills[id][3] && playeritem2[id]!=FEATHER){ // Levitation if (get_user_gravity(id)!=p_levitation[p_skills[id][3]-1]) set_user_gravity(id,p_levitation[p_skills[id][3]-1]) } else if (playeritem2[id]==FEATHER) set_user_gravity(id,0.45) else if (get_user_gravity(id)!=1.0) set_user_gravity(id,1.0) if (p_skills[id][0] == 2 && p_skills[id][1]){ // Invisibility if (knifeselected[id]){ new invisibility = p_invisibility[p_skills[id][1]-1]/2 set_user_rendering(id,kRenderFxNone, 0,0,0, kRenderTransTexture,invisibility) } else set_user_rendering(id,kRenderFxNone, 0,0,0, kRenderTransTexture,p_invisibility[p_skills[id][1]-1]) } else if (playeritem[id]==CLOAK){ if (knifeselected[id]){ new invisibility = CLOAKINVISIBILITY/2 set_user_rendering(id,kRenderFxNone, 0,0,0, kRenderTransTexture,invisibility) } else set_user_rendering(id,kRenderFxNone, 0,0,0, kRenderTransTexture,CLOAKINVISIBILITY) } else set_user_rendering(id) if (p_skills[id][0] != 4 || !p_skills[id][1]){ // Evasion if (get_user_health(id)>=500) set_user_health(id,get_user_health(id)-1024) } new parm[1] parm[0]=id unholyspeed(parm) return PLUGIN_CONTINUE } public death(){ checkmap() if (warcraft3==false) return PLUGIN_CONTINUE new killer_id = read_data(1) new victim_id = read_data(2) new headshot = read_data(3) new weaponname[20] read_data(4,weaponname,31) new weapon get_user_attacker(victim_id,weapon) new team[32] get_user_team(victim_id, team , 32); isdead[victim_id]=true new players[32] new numberofplayers get_players(players, numberofplayers) new y diedlastround[victim_id]=true if (playeritem2[victim_id]==CHAMELEON) CS_ClearModel(victim_id) if (playeritem2[victim_id]==HELM) set_user_hitzones(0,victim_id,255) becomemole[victim_id]=false if(equal(team,"TERRORIST") && pheonixexistsT>0){ get_players(players, numberofplayers) for (y = 0; y < numberofplayers; ++y){ if (pheonix[y]==6 && !is_user_alive(victim_id) && !endround && y!=victim_id){ pheonix[y]=-1 new parm[2] new name[32] parm[0]=victim_id set_task(0.3,"spawnit",2,parm,2) set_task(0.4,"spawnit",2,parm,2) set_task(0.5,"spawnit",2,parm,2) set_task(0.7,"giveweaponsback",2,parm,2) set_hudmessage(200, 100, 0, -0.8, 0.1, 0, 1.0, 5.0, 0.1, 0.2, 2) get_user_name(y,name,31) show_hudmessage(victim_id,"%s has revived you",name) get_user_name(victim_id,name,31) show_hudmessage(y,"You have revived %s, way to go !",name) pheonixexistsT-- } } } else if(equal(team,"CT") && pheonixexistsCT>0){ get_players(players, numberofplayers) for (y = 0; y < numberofplayers; ++y){ if (pheonix[y]==6 && !is_user_alive(victim_id) && !endround){ pheonix[y]=-1 new parm[2] new name[32] parm[0]=victim_id set_task(0.3,"spawnit",2,parm,2) set_task(0.4,"spawnit",2,parm,2) set_task(0.5,"spawnit",2,parm,2) set_task(0.7,"giveweaponsback",2,parm,2) set_hudmessage(200, 100, 0, -1.6, 0.1, 0, 1.0, 5.0, 0.1, 0.2, 2) get_user_name(y,name,31) show_hudmessage(victim_id,"%s has revived you",name) get_user_name(victim_id,name,31) show_hudmessage(y,"You have revived %s, way to go !",name) pheonixexistsCT-- } } } if(!deathbylight[victim_id] && !(killer_id==victim_id && !headshot && equal(weaponname,"world"))){ message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0) write_byte(killer_id) write_byte(victim_id) write_byte(headshot) write_string(weaponname) message_end() } // client_print(0,print_chat,"%d killed %d with %s (headshot: %d)",killer_id,victim_id,weaponname,headshot) if(playeritem2[victim_id]==RESPAWN && !changingteam[victim_id]) { new parm[2] parm[0]=victim_id parm[1]=6 set_task(1.2,"spawn",72,parm,2) spawnedfromitem[victim_id]=true } if (p_skills[victim_id][0] == 7 && p_skills[victim_id][4] && !hasblink[killer_id]){ // Vengeance new parm[2] parm[0]=victim_id parm[1]=6 if(!endround && !spawnused[victim_id]) { spawning[victim_id]=true set_task(1.2,"spawn",2,parm,2) spawnused[victim_id]=true } else spawning[victim_id]=false } else if (p_skills[victim_id][0]==1 && p_skills[victim_id][4] && !changingteam[victim_id]){ // Suicide Bomber emit_sound(victim_id,CHAN_STATIC, "ambience/particle_suck1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) new parm[2] parm[0]=victim_id parm[1]=6 set_task(0.3,"apacheexplode",1,parm,2) set_task(0.3,"blastcircles",2,parm,2) new origin[3] get_user_origin(victim_id,origin) message_begin( MSG_BROADCAST, SVC_TEMPENTITY ) write_byte( TE_IMPLOSION ) write_coord(origin[0]) write_coord(origin[1]) write_coord(origin[2]) write_byte(100) write_byte(20) write_byte(5) message_end() } diedlastround[victim_id]=true armorondeath[victim_id]=get_user_armor(victim_id) for (new i=0; i<32; ++i){ // Equipment Reincarnation savedweapons[victim_id][i]=0 } savednumber[victim_id]=0 get_user_weapons(victim_id,savedweapons[victim_id],savednumber[victim_id]) if (killer_id && killer_id!=victim_id && victim_id){ if (get_user_team(killer_id)==get_user_team(victim_id)){ playerxp[killer_id]-=xpgiven[p_level[killer_id]] } else{ if (!get_cvar_num("mp_weaponxpmodifier")) playerxp[killer_id]+=xpgiven[p_level[victim_id]] else playerxp[killer_id]+=floatround(xpgiven[p_level[victim_id]]*weaponxpmultiplier[weapon]) if (victim_id==hostagesaver) playerxp[killer_id]+=KILLRESCUEMANXP } displaylevel(killer_id, 1) } changingteam[victim_id]=false new parameter[1] parameter[0]=victim_id set_task(1.0,"getuserinput",3,parameter,1) return PLUGIN_CONTINUE } public getuserinput(parm[1]){ new id = parm[0] new skillsused = p_skills[id][1]+p_skills[id][2]+p_skills[id][3]+p_skills[id][4] if (p_skills[id][0] == 0){ if (!savexp) select_race(id) } else if (skillsused < p_level[id]) select_skill(id,0) else displaylevel(id, 1) return PLUGIN_HANDLED } public restart_round(){ if (warcraft3==false || savexp) return PLUGIN_CONTINUE new players[32] new numplayers new id get_players(players, numplayers) for (new i=0; iMAXGLOW) iglow[id][1]=MAXGLOW message_begin(MSG_ONE,gmsgFade,{0,0,0},id) write_short( 1<<10 ) // fade lasts this long duration write_short( 1<<10 ) // fade lasts this long hold time write_short( 1<<12 ) // fade type (in / out) write_byte( 0 ) // fade red write_byte( 255 ) // fade green write_byte( 0 ) // fade blue write_byte( iglow[id][1] ) // fade alpha message_end() } else{ hasdefuse[id]=false } } if (diedlastround[id]) { playeritem[id]=0 playeritem2[id]=0 rings[id]=0 set_user_footsteps(id, 0) } isdead[id]=false diedlastround[id]=false if (p_skills[id][0] == 4 && p_skills[id][1] && p_evadenextshot[id]){ // Evasion set_user_health(id,1124) } else if (p_skills[id][0] == 2 && p_skills[id][2]){ // Devotion Aura set_user_health(id,p_devotion[p_skills[id][2]-1]) } if (playeritem[id]==HEALTH) set_user_health(id,get_user_health(id)+HEALTHBONUS) new skillsused = p_skills[id][1]+p_skills[id][2]+p_skills[id][3]+p_skills[id][4] if (skillsused < p_level[id]){ select_skill(id,0) } else { displaylevel(id, 1) } return PLUGIN_CONTINUE } public giveshield(id){ give_item(id,"weapon_shield") } public randompistol(id) { new parm[2] parm[0]=id new wpnList[32] new number new bool:foundone = false get_user_weapons(id,wpnList,number) for (new i = 0;i < number && !foundone;i++) { if (wpnList[i] == CSW_GLOCK18 || wpnList[i] == CSW_USP || wpnList[i] == CSW_P228 || wpnList[i] == CSW_FIVESEVEN || wpnList[i] == CSW_ELITE || wpnList[i] == CSW_DEAGLE) foundone = true } if (foundone==true){ engclient_cmd(id,"weapon_glock18") engclient_cmd(id,"weapon_p228") engclient_cmd(id,"weapon_elite") engclient_cmd(id,"weapon_fiveseven") engclient_cmd(id,"weapon_deagle") engclient_cmd(id,"weapon_usp") engclient_cmd(id,"drop") } new randomnumber = random_num(1,7) new Red = random(256) new Green = random(256) new Blue = random(256) switch(randomnumber) { case 1: { give_item(id,"weapon_p228") give_item(id,"ammo_357sig") give_item(id,"ammo_357sig") give_item(id,"ammo_357sig") give_item(id,"ammo_357sig") give_item(id,"ammo_357sig") give_item(id,"ammo_357sig") give_item(id,"ammo_357sig") return PLUGIN_HANDLED } case 2: { give_item(id,"weapon_elite") give_item(id,"ammo_9mm") give_item(id,"ammo_9mm") give_item(id,"ammo_9mm") give_item(id,"ammo_9mm") give_item(id,"ammo_9mm") give_item(id,"ammo_9mm") give_item(id,"ammo_9mm") return PLUGIN_HANDLED } case 3: { give_item(id,"weapon_fiveseven") give_item(id,"ammo_57mm") give_item(id,"ammo_57mm") give_item(id,"ammo_57mm") give_item(id,"ammo_57mm") give_item(id,"ammo_57mm") give_item(id,"ammo_57mm") give_item(id,"ammo_57mm") return PLUGIN_HANDLED } case 4: { give_item(id,"weapon_deagle") give_item(id,"ammo_50ae") give_item(id,"ammo_50ae") give_item(id,"ammo_50ae") give_item(id,"ammo_50ae") give_item(id,"ammo_50ae") return PLUGIN_HANDLED } case 5: { give_item(id,"weapon_usp") give_item(id,"ammo_45acp") give_item(id,"ammo_45acp") give_item(id,"ammo_45acp") give_item(id,"ammo_45acp") give_item(id,"ammo_45acp") give_item(id,"ammo_45acp") give_item(id,"ammo_45acp") return PLUGIN_HANDLED } case 6: { give_item(id,"weapon_glock18") give_item(id,"ammo_9mm") give_item(id,"ammo_9mm") give_item(id,"ammo_9mm") give_item(id,"ammo_9mm") give_item(id,"ammo_9mm") give_item(id,"ammo_9mm") give_item(id,"ammo_9mm") give_item(id,"ammo_9mm") return PLUGIN_HANDLED } case 7: { user_kill(id,1) set_hudmessage(Red,Green,Blue, 0.03, 0.62, 2, 0.02, 2.0, 0.01, 0.1, 2) show_hudmessage(id,"Luck isn't with you today, you have been killed, no pistol for you!!") return PLUGIN_HANDLED } default: { set_hudmessage(Red,Green,Blue, 0.03, 0.62, 2, 0.02, 2.0, 0.01, 0.1, 2) show_hudmessage(0,"You should never see this message") return PLUGIN_HANDLED } } return PLUGIN_CONTINUE } public droppistols(parm[2]) { new id = parm[0] new team[32] get_user_team(id, team , 32); new wpnList[32] new number new foundGlock = false new foundUSP = false get_user_weapons(id,wpnList,number) for (new i = 0;i < number;i++) { if (wpnList[i] == CSW_GLOCK18) foundGlock = true if (wpnList[i] == CSW_USP) foundUSP = true } if (equal(team,"TERRORIST")){ if(foundGlock){ engclient_cmd(id,"weapon_glock18") engclient_cmd(id,"drop") } else return PLUGIN_HANDLED } if (equal(team,"CT")){ if(foundUSP){ engclient_cmd(id,"weapon_usp") engclient_cmd(id,"drop") } else return PLUGIN_HANDLED } return PLUGIN_CONTINUE } public buy_weapons(parm[]){ new id=parm[0] new menunum=parm[1] new string[2] num_to_str(menunum,string,1) engclient_cmd(id,"buyequip") engclient_cmd(id,"menuselect",string) client_cmd(id,"slot10") return PLUGIN_CONTINUE } public end_round(){ checkmap() if (warcraft3==false) return PLUGIN_CONTINUE endround=true new players[32] new numberofplayers get_players(players, numberofplayers) new y, id new parameter[1], i for (i = 0; i < numberofplayers; ++i){ parameter[0]=players[i] set_task(1.0,"getuserinput",5,parameter,1) } for (y = 0; y < numberofplayers; ++y){ id = players[y] spawnused[id]=false spawning[id]=false spawnedfromitem[id]=false shieldfound[id]=0 playerhasspawned[id]=false godused[id]=false if(goomba[id]==true){ CS_ClearModel(id) goomba[id]=false } if(fancalled[id] && playeritem2[id]!=CHAMELEON) CS_ClearModel(id) deathbylight[id]=false hasblink[id]=false godtime[id]=-6 carrioncount[id]=2 shadowcount[id]=2 runningcarrion[id]=0 poison[id]=1 poisoned[id]=false fancalled[id]=false } freezecalled = 0 pheonixexistsT=0 pheonixexistsCT=0 if (savexp) set_task(3.0,"update_file") return PLUGIN_CONTINUE } public select_skill(id,saychat){ if (warcraft3==false) return PLUGIN_CONTINUE if (p_skills[id][0] == 0){ if (saychat==1){ set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 2) show_hudmessage(id,"You must select a race before selecting skills!") } else client_cmd(id,"echo You must select a race before selecting skills!") return PLUGIN_HANDLED } new message[256] new temp[128] new skillsused = p_skills[id][1]+p_skills[id][2]+p_skills[id][3]+p_skills[id][4] if (skillsused>=p_level[id]){ if (saychat==1){ set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 2) show_hudmessage(id,"You have already used up all your skill points!") } else client_cmd(id,"echo You have already used up all your skill points!") return PLUGIN_HANDLED } if (is_user_bot(id)){ new randomskill while (skillsused < p_level[id]){ randomskill = random_num(1,3) if (p_skills[id][4]==0 && p_level[id]>=6) p_skills[id][4]=1 else if (p_skills[id][randomskill]!=3 && p_level[id]>2*p_skills[id][randomskill]){ ++p_skills[id][randomskill] } skillsused = p_skills[id][1]+p_skills[id][2]+p_skills[id][3]+p_skills[id][4] } return PLUGIN_HANDLED } format(message,255,"\ySelect Skill:\w^n") new skillcounter = 0 new skillcurrentrace[4][64] while (skillcounter < 4){ if (p_skills[id][0] == 1){ copy(skillcurrentrace[skillcounter],63,race1skill[skillcounter]) } else if (p_skills[id][0] == 2){ copy(skillcurrentrace[skillcounter],63,race2skill[skillcounter]) } else if (p_skills[id][0] == 3){ copy(skillcurrentrace[skillcounter],63,race3skill[skillcounter]) } else if (p_skills[id][0] == 4){ copy(skillcurrentrace[skillcounter],63,race4skill[skillcounter]) } else if (p_skills[id][0] == 5){ copy(skillcurrentrace[skillcounter],63,race5skill[skillcounter]) } else if (p_skills[id][0] == 6){ copy(skillcurrentrace[skillcounter],63,race6skill[skillcounter]) } else if (p_skills[id][0] == 7){ copy(skillcurrentrace[skillcounter],63,race7skill[skillcounter]) } else if (p_skills[id][0] == 8){ copy(skillcurrentrace[skillcounter],63,race8skill[skillcounter]) } ++skillcounter } skillcounter = 1 while (skillcounter< 4){ if (p_skills[id][skillcounter]!=3){ if (p_level[id]<=2*p_skills[id][skillcounter]){ format(temp,127,"\d") add(message,255,temp) } format(temp,127,"^n%d. %s Level %d\w",skillcounter,skillcurrentrace[skillcounter-1],p_skills[id][skillcounter]+1) add(message,255,temp) } ++skillcounter } if (p_skills[id][4]==0){ if (p_level[id]<=5){ format(temp,127,"\d") add(message,255,temp) } format(temp,127,"^n4. Ultimate: %s\w",skillcurrentrace[3]) add(message,255,temp) } new keys = (1<<9) if (p_skills[id][1]!=3 && p_level[id]>2*p_skills[id][1] && skillsused2*p_skills[id][2] && skillsused2*p_skills[id][3] && skillsused=6 && skillsused2*p_skills[id][1] && skillsused2*p_skills[id][2] && skillsused2*p_skills[id][3] && skillsused=6 && skillsused100) set_user_health(id,100) if (savexp){ playerxp[id] = 0 p_level[id] = 0 get_xp_from_file(id,0) } if (get_user_team(id)==0){ engclient_cmd(id, "chooseteam") return PLUGIN_HANDLED } else { new skillsused = p_skills[id][1]+p_skills[id][2]+p_skills[id][3] if (skillsused < p_level[id]) select_skill(id,0) } return PLUGIN_HANDLED } public resetultimate(parm[2]){ new id = parm[0] ultimateused[id]=false reseting[id]=false } public set_target(id,key){ // Teleport new targetid = teleportid[id][key] remove_task(666+id) teleportmenu[id]=false client_cmd(id,"slot10") new parm[2] parm[0]=id if (get_cvar_num("sv_restrictultimate")==0 && !reseting[id] && !ultimateused[id]){ set_task(7.5,"resetultimate",2,parm,2) reseting[id]=true } if (is_user_alive(id) && is_user_alive(targetid) && get_user_maxspeed(id)>10 && get_user_team(id)==get_user_team(targetid) && key!=9 && !ultimateused[id] && !endround){ ultimateused[id]=true new waitparm[6] waitparm[0]=id waitparm[1]=targetid waitparm[5]=floatround(get_user_maxspeed(id)) set_user_maxspeed(id,1.0) stunned[id]=true telewaitstop(waitparm) new cooldownparm[1] cooldownparm[0]=id set_task(TELEPORT_COOLDOWN,"cooldown",6,cooldownparm,1) } return PLUGIN_HANDLED } public damage_event(id){ checkmap() if (warcraft3==false) return PLUGIN_CONTINUE new weapon, bodypart, enemy = get_user_attacker(id,weapon,bodypart) new damage new victimisdead=0 new enemyisdead=0 new victimkilled=0 new enemykilled=0 if (is_user_alive(id)==0) victimisdead=1 if (is_user_alive(enemy)==0) enemyisdead=1 // client_print(0,print_chat,"%d attacked %d with %d",enemy,id,weapon) if (enemy==id && weapon==0){ return PLUGIN_CONTINUE } else if (enemy==0){ return PLUGIN_CONTINUE } if (is_user_bot(enemy) && p_skills[enemy][4]==1){ if (p_skills[enemy][0]==3 || p_skills[enemy][0]==4){ ultimate(enemy) } } if (p_skills[enemy][0] == 7 && p_skills[enemy][3] && !hasblink[id]){ // Shadow Strike new bool:p_shadowcurrentshot new Float:randomnumber = random_float(0.0,1.0) if (randomnumber <= p_shadow[p_skills[enemy][2]-1]) p_shadowcurrentshot=true else p_shadowcurrentshot=false if (p_shadowcurrentshot && shadowcount[enemy]>0 && is_user_alive(id)){ new idorigin[3] new enemyorigin[3] get_user_origin(id,idorigin) get_user_origin(enemy,enemyorigin) message_begin( MSG_BROADCAST,SVC_TEMPENTITY) write_byte( TE_SPRITETRAIL ) write_coord(enemyorigin[0]) write_coord(enemyorigin[1]) write_coord(enemyorigin[2]) write_coord(idorigin[0]) write_coord(idorigin[1]) write_coord(idorigin[2]) write_short( shadow ) // short (sprite index) write_byte( 50 ) // byte (count) write_byte( 15 ) // byte (life in 0.1's) write_byte( 1 ) // byte (scale in 0.1's) write_byte( 2 ) // byte (velocity along vector in 10's) write_byte( 6 ) // byte (randomness of velocity in 10's) message_end() set_hudmessage(200, 100, 0, 0.2, 0.2, 0, 1.0, 5.0, 0.1, 0.2, 2) shadowcount[enemy]-- show_hudmessage(enemy,"You have %d poisoned dagger(s) left",shadowcount[enemy]) damage = 10 if (get_user_health(id) - damage<=0) victimkilled = 1 else if (get_user_health(id) - damage<=1024 && get_user_health(id)>500) victimkilled = 1 else victimkilled = 0 if (victimkilled) set_user_health(id, -1) else set_user_health(id, get_user_health(id) - damage) } } if (p_skills[enemy][0] == 8 && p_skills[enemy][3] && !hasblink[id]){ // Carrion Beetle new bool:p_carrioncurrentshot new Float:randomnumber = random_float(0.0,1.0) if (randomnumber <= p_carrion[p_skills[enemy][2]-1]) p_carrioncurrentshot=true else p_carrioncurrentshot=false if (p_carrioncurrentshot && carrioncount[enemy]>0 && is_user_alive(id)){ new idorigin[3] new enemyorigin[3] get_user_origin(id,idorigin) get_user_origin(enemy,enemyorigin) message_begin( MSG_BROADCAST,SVC_TEMPENTITY) write_byte( TE_SPRITETRAIL ) write_coord(enemyorigin[0]) write_coord(enemyorigin[1]) write_coord(enemyorigin[2]) write_coord(idorigin[0]) write_coord(idorigin[1]) write_coord(idorigin[2]) write_short( grunt ) // short (sprite index) write_byte( 50 ) // byte (count) write_byte( 15 ) // byte (life in 0.1's) write_byte( 1 ) // byte (scale in 0.1's) write_byte( 2 ) // byte (velocity along vector in 10's) write_byte( 6 ) // byte (randomness of velocity in 10's) message_end() set_hudmessage(200, 100, 0, 0.2, 0.2, 0, 1.0, 5.0, 0.1, 0.2, 2) carrioncount[id]-- show_hudmessage(enemy,"You have %d beetle(s) left",carrioncount[enemy]) emit_sound(id,CHAN_ITEM, "weapons/cbar_hitbod3.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) damage = 10 if (get_user_health(id) - damage<=0) victimkilled = 1 else if (get_user_health(id) - damage<=1024 && get_user_health(id)>500) victimkilled = 1 else victimkilled = 0 if (victimkilled) set_user_health(id, -1) else set_user_health(id, get_user_health(id) - damage) } } if (p_skills[id][0] == 4){ // Evasion if (hasblink[enemy]){ if (get_user_health(id)>500) set_user_health(id,get_user_health(id)-1024) } else if (p_skills[id][1]) { new healthadjustment new bool:p_evadecurrentshot = p_evadenextshot[id] new Float:randomnumber = random_float(0.0,1.0) if (randomnumber <= p_evasion[p_skills[id][1]-1]){ p_evadenextshot[id]=true if (get_user_health(id)<=100){ healthadjustment = 1024 } } else{ p_evadenextshot[id]=false if (get_user_health(id)>100){ healthadjustment = -1024 } } if (p_evadecurrentshot){ damage = read_data(2) set_user_health(id, get_user_health(id) + damage + healthadjustment) if (iglow[id][2] < 1){ new parm[2] parm[0] = id set_task(0.01,"glow_change",7,parm,2) } iglow[id][2] += damage iglow[id][0] = 0 iglow[id][1] = 0 iglow[id][3] = 0 if (iglow[id][2]>MAXGLOW) iglow[id][2]=MAXGLOW message_begin(MSG_ONE,gmsgFade,{0,0,0},id) write_short( 1<<10 ) // fade lasts this long duration write_short( 1<<10 ) // fade lasts this long hold time write_short( 1<<12 ) // fade type (in / out) write_byte( 0 ) // fade red write_byte( 0 ) // fade green write_byte( 255 ) // fade blue write_byte( iglow[id][2] ) // fade alpha message_end() return PLUGIN_CONTINUE } else set_user_health(id, get_user_health(id) + healthadjustment) } if (p_skills[id][2] && !hasblink[enemy]) { // Thorns Aura damage = read_data(2) damage = floatround(float(damage) * p_thorns[p_skills[id][2]-1]) if (get_user_health(enemy) - damage<=0) enemykilled = 1 else if (get_user_health(enemy) - damage<=1024 && get_user_health(enemy)>500) enemykilled = 1 else enemykilled = 0 if (enemykilled) set_user_health(enemy, -1) else set_user_health(enemy, get_user_health(enemy) - damage) if (iglow[enemy][0] < 1){ new parm[2] parm[0] = enemy set_task(0.01,"glow_change",8,parm,2) } iglow[enemy][0] += 3*damage iglow[enemy][1] = 0 iglow[enemy][2] = 0 iglow[enemy][3] = 0 if (iglow[enemy][0]>MAXGLOW) iglow[enemy][0]=MAXGLOW message_begin(MSG_ONE,gmsgFade,{0,0,0},enemy) write_short( 1<<10 ) // fade lasts this long duration write_short( 1<<10 ) // fade lasts this long hold time write_short( 1<<12 ) // fade type (in / out) write_byte( 255 ) // fade red write_byte( 0 ) // fade green write_byte( 0 ) // fade blue write_byte( iglow[enemy][0] ) // fade alpha message_end() } } else if (p_skills[id][0]==8){ if (p_skills[id][2] && !hasblink[enemy]) { // Spiked Carapace damage = read_data(2) damage = floatround(float(damage) * p_spiked[p_skills[id][2]-1]) if (get_user_health(enemy) - damage<=0) enemykilled = 1 else if (get_user_health(enemy) - damage<=1024 && get_user_health(enemy)>500) enemykilled = 1 else enemykilled = 0 if (enemykilled) set_user_health(enemy, -1) else set_user_health(enemy, get_user_health(enemy) - damage) set_user_armor(id,get_user_armor(id)+damage) if (iglow[enemy][0] < 1){ new parm[2] parm[0] = enemy set_task(0.01,"glow_change",8,parm,2) } iglow[enemy][0] += 3*damage iglow[enemy][1] = 0 iglow[enemy][2] = 0 iglow[enemy][3] = 0 if (iglow[enemy][0]>MAXGLOW) iglow[enemy][0]=MAXGLOW message_begin(MSG_ONE,gmsgFade,{0,0,0},enemy) write_short( 1<<10 ) // fade lasts this long duration write_short( 1<<10 ) // fade lasts this long hold time write_short( 1<<12 ) // fade type (in / out) write_byte( 255 ) // fade red write_byte( 0 ) // fade green write_byte( 0 ) // fade blue write_byte( iglow[enemy][0] ) // fade alpha message_end() } } else if (p_skills[enemy][0] == 8){ if (p_skills[enemy][1] && !hasblink[id]){ new Float:randomnumber = random_float(0.0,1.0) if (randomnumber <= p_impale[p_skills[enemy][3]-1]){ message_begin(MSG_ONE,gmsgShake,{0,0,0},id) write_short( 1<<14 )// shake amount write_short( 1<<14 )// shake lasts this long write_short( 1<<14 )// shake noise frequency message_end() } } } else if (p_skills[enemy][0] == 6){ // Hex if (p_skills[enemy][2] && !hasblink[id]) { new Float:randomnumber = random_float(0.0,1.0) if (randomnumber <= p_hex[p_skills[enemy][3]-1]){ CS_SetModel(id,"goomba") goomba[id]=true } } } else if (p_skills[enemy][0] == 5){ // Banish if (p_skills[enemy][2] && !hasblink[id]) { new Float:randomnumber = random_float(0.0,1.0) if (randomnumber <= p_banish[p_skills[enemy][3]-1]){ new parm[2] parm[0]=id new origin[3] get_user_origin(id,origin) origin[2]+=40 set_user_origin(id,origin) if (iglow[id][3] < 1){ parm[0] = id parm[1] = 0 set_task(0.01,"glow_change",11,parm,2) } iglow[id][3] += 100 iglow[id][0] = 0 iglow[id][1] = 0 iglow[id][2] = 0 if (iglow[id][3]>MAXGLOW) iglow[id][3]=MAXGLOW message_begin(MSG_ONE,gmsgFade,{0,0,0},id) write_short( 1<<10 ) // fade lasts this long duration write_short( 1<<10 ) // fade lasts this long hold time write_short( 1<<12 ) // fade type (in / out) write_byte( 255 ) // fade red write_byte( 255 ) // fade green write_byte( 255 ) // fade blue write_byte( iglow[id][3] ) // fade alpha message_end() } } } else if (p_skills[enemy][0] == 5){ // Siphon Mana if (p_skills[enemy][3] && !hasblink[id]) { damage = read_data(2) damage = floatround(float(damage) * p_mana[p_skills[enemy][3]-1]) set_user_armor(enemy, get_user_armor(enemy) + damage) if (iglow[enemy][1] < 1){ new parm[2] parm[0] = enemy set_task(0.01,"glow_change",9,parm,2) } iglow[enemy][1] += damage iglow[enemy][0] = 0 iglow[enemy][2] = 0 iglow[enemy][3] = 0 if (iglow[enemy][1]>MAXGLOW) iglow[enemy][1]=MAXGLOW message_begin(MSG_ONE,gmsgFade,{0,0,0},enemy) write_short( 1<<10 ) // fade lasts this long duration write_short( 1<<10 ) // fade lasts this long hold time write_short( 1<<12 ) // fade type (in / out) write_byte( 120 ) // fade red write_byte( 120 ) // fade green write_byte( 120 ) // fade blue write_byte( iglow[enemy][1] ) // fade alpha message_end() } } else if (p_skills[enemy][0] == 1){ // Vampiric Aura if (p_skills[enemy][1] && !hasblink[id]) { damage = read_data(2) damage = floatround(float(damage) * p_vampiric[p_skills[enemy][1]-1]) set_user_health(enemy, get_user_health(enemy) + damage) // Extra-Start: Changed by joecool12321, bugfix v2.20.4: "Vampiric Aura" bugged for "Undead Scourge" with "Periapt of Health". // Optimised by Tri Moon. // The checks for "Undead Scourge" and "Vampiric Aura" is already done above. // If enemy is carying "Periapt of Health" clip his health at 100+"Periapt of Health". if (get_user_health(enemy) > p_vampirichealth[p_skills[enemy][1]-1]+ (playeritem[enemy]==HEALTH ? HEALTHBONUS : 0) ){ set_user_health(enemy, p_vampirichealth[p_skills[enemy][1]-1]+ (playeritem[enemy]==HEALTH ? HEALTHBONUS : 0) ) } // Extra-End: Changed by joecool12321, bugfix v2.20.4: "Vampiric Aura" bugged for "Undead Scourge" with "Periapt of Health". if (iglow[enemy][1] < 1){ new parm[2] parm[0] = enemy set_task(0.01,"glow_change",9,parm,2) } iglow[enemy][1] += damage iglow[enemy][0] = 0 iglow[enemy][2] = 0 iglow[enemy][3] = 0 if (iglow[enemy][1]>MAXGLOW) iglow[enemy][1]=MAXGLOW message_begin(MSG_ONE,gmsgFade,{0,0,0},enemy) write_short( 1<<10 ) // fade lasts this long duration write_short( 1<<10 ) // fade lasts this long hold time write_short( 1<<12 ) // fade type (in / out) write_byte( 0 ) // fade red write_byte( 255 ) // fade green write_byte( 0 ) // fade blue write_byte( iglow[enemy][1] ) // fade alpha message_end() } } else if (p_skills[enemy][0] == 2){ // Bash (DOESN'T WORK ON BOTS) if (p_skills[enemy][3] && !hasblink[id]) { new Float:randomnumber = random_float(0.0,1.0) if (randomnumber <= p_bash[p_skills[enemy][3]-1] && get_user_maxspeed(id)>10 && !slowed[id]){ // Cannot bash if already bashed or frosted new normalspeed = floatround(get_user_maxspeed(id)) set_user_maxspeed(id,1.0) // Replace "id" with "enemy" to test bash on self stunned[id]=true new parm[2] parm[0]=id // Replace "id" with "enemy" to test bash on self parm[1]=normalspeed set_task(1.0,"reset_maxspeed",10,parm,2) if (iglow[id][3] < 1){ parm[0] = id parm[1] = 0 set_task(0.01,"glow_change",11,parm,2) } iglow[id][3] += 100 iglow[id][0] = 0 iglow[id][1] = 0 iglow[id][2] = 0 if (iglow[id][3]>MAXGLOW) iglow[id][3]=MAXGLOW message_begin(MSG_ONE,gmsgFade,{0,0,0},id) write_short( 1<<10 ) // fade lasts this long duration write_short( 1<<10 ) // fade lasts this long hold time write_short( 1<<12 ) // fade type (in / out) write_byte( 255 ) // fade red write_byte( 255 ) // fade green write_byte( 255 ) // fade blue write_byte( iglow[id][3] ) // fade alpha message_end() } } } else if (p_skills[enemy][0] == 3){ // Critical Strike if (p_skills[enemy][1] && !hasblink[id]) { new Float:randomnumber = random_float(0.0,1.0) if (randomnumber <= p_critical[p_skills[enemy][1]-1]){ damage = read_data(2) damage = floatround(float(damage) * p_skills[enemy][1]) // Will be either 1, 2 or 3 times damage induced depending on skill level if (get_user_health(id) - damage<=0) victimkilled = 1 if (get_user_health(id) - damage<=1024 && get_user_health(id)>500) victimkilled = 1 if (victimkilled) set_user_health(id, -1) else set_user_health(id, get_user_health(id) - damage) if (iglow[id][0] < 1){ new parm[2] parm[0] = id set_task(0.01,"glow_change",12,parm,2) } iglow[id][0] += damage iglow[id][1] = 0 iglow[id][2] = 0 iglow[id][3] = 0 if (iglow[id][0]>MAXGLOW) iglow[id][0]=MAXGLOW message_begin(MSG_ONE,gmsgFade,{0,0,0},id) write_short( 1<<10 ) // fade lasts this long duration write_short( 1<<10 ) // fade lasts this long hold time write_short( 1<<12 ) // fade type (in / out) write_byte( 255 ) // fade red write_byte( 0 ) // fade green write_byte( 0 ) // fade blue write_byte( iglow[id][0] ) // fade alpha message_end() } } if (p_skills[enemy][2] && playeritem[id]!=IMMUNITY && !hasblink[id]){ // Critical Grenade if (weapon == 4){ damage = read_data(2) damage = floatround(float(damage) * p_grenade[p_skills[enemy][2]-1]) if (get_user_health(id) - damage<=0) victimkilled = 1 if (get_user_health(id) - damage<=1024 && get_user_health(id)>500) victimkilled = 1 if (victimkilled) set_user_health(id, -1) else set_user_health(id,get_user_health(id) - damage) if (iglow[id][0] < 1){ new parm[2] parm[0] = id set_task(0.01,"glow_change",13,parm,2) } iglow[id][0] += damage iglow[id][1] = 0 iglow[id][2] = 0 iglow[id][3] = 0 if (iglow[id][0]>MAXGLOW) iglow[id][0]=MAXGLOW message_begin(MSG_ONE,gmsgFade,{0,0,0},id) write_short( 1<<10 ) // fade lasts this long duration write_short( 1<<10 ) // fade lasts this long hold time write_short( 1<<12 ) // fade type (in / out) write_byte( 255 ) // fade red write_byte( 0 ) // fade green write_byte( 0 ) // fade blue write_byte( iglow[id][0] ) // fade alpha message_end() } } } else if (p_skills[enemy][0] == 4){ // Trueshot Aura if (p_skills[enemy][3] && !hasblink[id]) { damage = read_data(2) damage = floatround(float(damage) * p_trueshot[p_skills[enemy][3]-1]) if (get_user_health(id) - damage<=0) victimkilled = 1 if (get_user_health(id) - damage<=1024 && get_user_health(id)>500) victimkilled = 1 if (victimkilled) set_user_health(id, -1) else set_user_health(id, get_user_health(id) - damage) if (iglow[id][0] < 1){ new parm[2] parm[0] = id set_task(0.01,"glow_change",14,parm,2) } iglow[id][0] += 2*damage iglow[id][1] = 0 iglow[id][2] = 0 iglow[id][3] = 0 if (iglow[id][0]>MAXGLOW) iglow[id][0]=MAXGLOW message_begin(MSG_ONE,gmsgFade,{0,0,0},id) write_short( 1<<10 ) // fade lasts this long duration write_short( 1<<10 ) // fade lasts this long hold time write_short( 1<<12 ) // fade type (in / out) write_byte( 255 ) // fade red write_byte( 0 ) // fade green write_byte( 0 ) // fade blue write_byte( iglow[id][0] ) // fade alpha message_end() } } if (playeritem[enemy] == CLAWS){ // Claws of Attack damage = CLAWSOFATTACK if (get_user_health(id) - damage<=0) victimkilled = 1 if (get_user_health(id) - damage<=1024 && get_user_health(id)>500) victimkilled = 1 if (victimkilled) set_user_health(id, -1) else set_user_health(id, get_user_health(id) - damage) if (iglow[id][0] < 1){ new parm[2] parm[0] = id set_task(0.01,"glow_change",14,parm,2) } iglow[id][0] += 2*damage iglow[id][1] = 0 iglow[id][2] = 0 iglow[id][3] = 0 if (iglow[id][0]>MAXGLOW) iglow[id][0]=MAXGLOW message_begin(MSG_ONE,gmsgFade,{0,0,0},id) write_short( 1<<10 ) // fade lasts this long duration write_short( 1<<10 ) // fade lasts this long hold time write_short( 1<<12 ) // fade type (in / out) write_byte( 255 ) // fade red write_byte( 0 ) // fade green write_byte( 0 ) // fade blue write_byte( iglow[id][0] ) // fade alpha message_end() } else if (playeritem[enemy] == MASK){ // Mask of Death damage = read_data(2) damage = floatround(float(damage) * MASKPERCENT) set_user_health(enemy, get_user_health(enemy) + damage) // Extra-Start: Changed by joecool12321, bugfix v2.20.4: "Mask of Death" bugged for "Human Alliance" with "Devotion Aura". // Optimised by Tri Moon. // If enemy is "Human Alliance" with "Devotion Aura" clip his health at max for his "Devotion Aura" level. if (get_user_health(enemy) > (p_skills[enemy][0]==2 ? p_devotion[p_skills[enemy][2]-1] : 100) ){ set_user_health(enemy, (p_skills[enemy][0]==2 ? p_devotion[p_skills[enemy][2]-1] : 100) ) } // Extra-End: Changed by joecool12321, bugfix v2.20.4: "Mask of Death" bugged for "Human Alliance" with "Devotion Aura". if (iglow[enemy][1] < 1){ new parm[2] parm[0] = enemy set_task(0.01,"glow_change",9,parm,2) } iglow[enemy][1] += damage iglow[enemy][0] = 0 iglow[enemy][2] = 0 iglow[enemy][3] = 0 if (iglow[enemy][1]>MAXGLOW) iglow[enemy][1]=MAXGLOW message_begin(MSG_ONE,gmsgFade,{0,0,0},enemy) write_short( 1<<10 ) // fade lasts this long duration write_short( 1<<10 ) // fade lasts this long hold time write_short( 1<<12 ) // fade type (in / out) write_byte( 0 ) // fade red write_byte( 255 ) // fade green write_byte( 0 ) // fade blue write_byte( iglow[enemy][1] ) // fade alpha message_end() } else if (playeritem[enemy] == FROST){ // Frost (DOESN'T WORK ON BOTS) if (get_user_maxspeed(id)>10 && !slowed[id]){ // Cannot frost if bashed or frosted new normalspeed = floatround(get_user_maxspeed(id)) set_user_maxspeed(id,FROSTSPEED) // Replace "id" with "enemy" to test bash on self slowed[id]=true new parm[2] parm[0]=id // Replace "id" with "enemy" to test bash on self parm[1]=normalspeed set_task(1.0,"reset_maxspeed",10,parm,2) if (iglow[id][3] < 1){ parm[0] = id parm[1] = 0 set_task(0.01,"glow_change",11,parm,2) } iglow[id][3] += 100 iglow[id][0] = 0 iglow[id][1] = 0 iglow[id][2] = 0 if (iglow[id][3]>MAXGLOW) iglow[id][3]=MAXGLOW message_begin(MSG_ONE,gmsgFade,{0,0,0},id) write_short( 1<<10 ) // fade lasts this long duration write_short( 1<<10 ) // fade lasts this long hold time write_short( 1<<12 ) // fade type (in / out) write_byte( 255 ) // fade red write_byte( 255 ) // fade green write_byte( 255 ) // fade blue write_byte( iglow[id][3] ) // fade alpha message_end() } } if (enemykilled && !enemyisdead){ // due to thorns aura if (get_user_team(id)!=get_user_team(enemy)){ set_user_frags(id, get_user_frags(id)+1) set_user_frags(enemy, get_user_frags(enemy)+1) playerxp[id]+=xpgiven[p_level[enemy]] displaylevel(id, 1) } message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0) write_byte(id) write_byte(enemy) write_byte(0) write_string(race4skill[1]) message_end() } if (victimkilled && !victimisdead){ // due to all aggressive auras new headshot if (bodypart==1) headshot=1 else headshot=0 new weaponname[32] switch (weapon) { case 1: weaponname = "p228" case 3: weaponname = "scout" case 4: weaponname = "grenade" case 5: weaponname = "xm1014" case 7: weaponname = "mac10" case 8: weaponname = "aug" case 10: weaponname = "elite" case 11: weaponname = "fiveseven" case 12: weaponname = "ump45" case 13: weaponname = "sg550" case 16: weaponname = "usp" case 17: weaponname = "glock18" case 18: weaponname = "awp" case 19: weaponname = "mp5navy" case 20: weaponname = "m249" case 21: weaponname = "m3" case 22: weaponname = "m4a1" case 23: weaponname = "tmp" case 24: weaponname = "g3sg1" case 26: weaponname = "deagle" case 27: weaponname = "sg552" case 28: weaponname = "ak47" case 29: weaponname = "knife" case 30: weaponname = "p90" } if (!victimisdead){ if (get_user_team(id)!=get_user_team(enemy)){ set_user_frags(id, get_user_frags(id)+1) set_user_frags(enemy, get_user_frags(enemy)+1) if (!get_cvar_num("mp_weaponxpmodifier")) playerxp[enemy]+=xpgiven[p_level[id]] else playerxp[enemy]+=floatround(xpgiven[p_level[id]]*weaponxpmultiplier[weapon]) } else{ set_user_frags(id, get_user_frags(id)+1) set_user_frags(enemy, get_user_frags(enemy)-1) playerxp[enemy]-=xpgiven[p_level[enemy]] } } message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0) write_byte(enemy) write_byte(id) write_byte(headshot) write_string(weaponname) message_end() displaylevel(enemy, 1) } return PLUGIN_CONTINUE } public glow_change(parm[]){ new id = parm[0] if (p_skills[id][0]==2 && p_skills[id][1]){ // Don't glow if player is invisible iglow[id][0] = 0 iglow[id][1] = 0 iglow[id][2] = 0 iglow[id][3] = 0 } if (playeritem[id]==CLOAK){ // Don't glow if player is invisible iglow[id][0] = 0 iglow[id][1] = 0 iglow[id][2] = 0 iglow[id][3] = 0 } else if (iglow[id][0] > 5){ set_user_rendering(id,kRenderFxGlowShell,iglow[id][0],0,0, kRenderNormal, 16) iglow[id][0] -= 5 set_task(0.2,"glow_change",15,parm,2) } else if (iglow[id][1] > 5){ set_user_rendering(id,kRenderFxGlowShell,0,iglow[id][1],0, kRenderNormal, 16) iglow[id][1] -= 5 set_task(0.2,"glow_change",16,parm,2) } else if (iglow[id][2] > 5){ set_user_rendering(id,kRenderFxGlowShell,0,0,iglow[id][2], kRenderNormal, 16) iglow[id][2] -= 5 set_task(0.2,"glow_change",17,parm,2) } else if (iglow[id][3] > 5){ set_user_rendering(id,kRenderFxGlowShell,iglow[id][3],iglow[id][3],iglow[id][3], kRenderNormal, 16) iglow[id][3] -= 5 set_task(0.2,"glow_change",18,parm,2) } else{ iglow[id][0] = 0 iglow[id][1] = 0 iglow[id][2] = 0 iglow[id][3] = 0 set_user_rendering(id) } return PLUGIN_CONTINUE } public reset_maxspeed(parm[]){ new enemy = parm[0] new normalspeed = parm[1] stunned[enemy]=false slowed[enemy]=false set_user_maxspeed(enemy, float(normalspeed)) return PLUGIN_CONTINUE } #if STEAM_POWERED public zoomed2(id){ zoomed[id]=1 } public unzoomed(id){ zoomed[id]=0 } #endif public nadetimer(parm[2]){ new id = parm[0] set_hudmessage(0, 100, 0, 0.05, 0.65, 2, 0.02, 10.0, 0.01, 0.1, 2) if(playeritem2[id]!=INFERNO){ show_hudmessage(id,"") return PLUGIN_HANDLED } if(nadetime[parm[0]]!=0) show_hudmessage(id,"%d second(s) until your next nade", nadetime[parm[0]]) nadetime[parm[0]] -= 1 if (!is_user_alive(id)) show_hudmessage(id,"Don't die next time and I'll give you another nade, DUMBASS!") if (nadetime[parm[0]]!=-1 && is_user_alive(parm[0])) set_task(1.0,"nadetimer",4,parm,2) if (nadetime[parm[0]]==-1){ giveheifnothas(parm) nadetime[id] = 10 return PLUGIN_HANDLED } return PLUGIN_CONTINUE } public change_weapon(id) { checkmap() if (warcraft3==false) return PLUGIN_CONTINUE if (playeritem2[id]==INFERNO) { new wpnList[32] new number new foundNade = false get_user_weapons(id,wpnList,number) for (new i = 0;i < number && !foundNade;i++) { if (wpnList[i] == CSW_HEGRENADE) foundNade = true } new parm[2] parm[0]=id if(!justgivennade[id] && !foundNade) { justgivennade[id]=true nadetimer(parm) } } if (p_skills[id][0] == 2 && p_skills[id][1]){ // Invisibility if (read_data(2)==29){ set_user_rendering(id,kRenderFxNone, 0,0,0, kRenderTransTexture,p_invisibility[p_skills[id][1]-1]/2) knifeselected[id]=true } else{ set_user_rendering(id,kRenderFxNone, 0,0,0, kRenderTransTexture,p_invisibility[p_skills[id][1]-1]) knifeselected[id]=false } } else if (playeritem[id]==CLOAK){ if (read_data(2)==29){ set_user_rendering(id,kRenderFxNone, 0,0,0, kRenderTransTexture,CLOAKINVISIBILITY/2) knifeselected[id]=true } else{ set_user_rendering(id,kRenderFxNone, 0,0,0, kRenderTransTexture,CLOAKINVISIBILITY) knifeselected[id]=false } } #if STEAM_POWERED new weaponnum = (read_data(2)) if (!freezetime && !slowed[id] && !stunned[id]) { if (weaponnum==3){ //scout if (zoomed[id]==1) set_user_maxspeed(id,220.0) else set_user_maxspeed(id,260.0) //220 zoomed } else if (weaponnum==4){ //hegrenad set_user_maxspeed(id,260.0) } else if (weaponnum==5){ //xm1014 set_user_maxspeed(id,230.0) } else if (weaponnum==7){ //mac10 set_user_maxspeed(id,250.0) } else if (weaponnum==8){ //aug - bollup set_user_maxspeed(id,240.0) } else if (weaponnum==9){ //smokegrenade set_user_maxspeed(id,250.0) } else if (weaponnum==12){ //ump45 set_user_maxspeed(id,250.0) } else if (weaponnum==13){ //sg550 if (zoomed[id]==1) set_user_maxspeed(id,150.0) else set_user_maxspeed(id,210.0) //150 zoomed } else if (weaponnum==18){ //awp if (zoomed[id]==1) set_user_maxspeed(id,150.0) else set_user_maxspeed(id,210.0) //150 zoomed } else if (weaponnum==19){ //mp5 set_user_maxspeed(id,250.0) } else if (weaponnum==20){ //m249 set_user_maxspeed(id,220.0) } else if (weaponnum==21){ //auto-shotty (m3) set_user_maxspeed(id,240.0) } else if (weaponnum==14){ //galil set_user_maxspeed(id,240.0) } else if (weaponnum==15){ //famas set_user_maxspeed(id,240.0) } else if (weaponnum==22){ //M4A1 set_user_maxspeed(id,230.0) } else if (weaponnum==23){ //TMP set_user_maxspeed(id,250.0) } else if (weaponnum==24){ //G3SG1 if (zoomed[id]==1) set_user_maxspeed(id,150.0) else set_user_maxspeed(id,210.0) //150 zoomed } else if (weaponnum==25){ //flashbang set_user_maxspeed(id,250.0) } else if (weaponnum==27){ //sg552 set_user_maxspeed(id,235.0) } else if (weaponnum==28){ //AK47 set_user_maxspeed(id,221.0) } else if (weaponnum==30){ //P90 set_user_maxspeed(id,245.0) } else if (weaponnum==1){ //p228 set_user_maxspeed(id,250.0) } else if (weaponnum==10 ){ //elite set_user_maxspeed(id,250.0) } else if (weaponnum==11){ //fiveseven set_user_maxspeed(id,250.0) } else if (weaponnum==26){ //deagle set_user_maxspeed(id,250.0) } else if (weaponnum==16){ //usp set_user_maxspeed(id,250.0) } else if (weaponnum==17){ //glock set_user_maxspeed(id,250.0) } else if (weaponnum==29){ //knife set_user_maxspeed(id,250.0) } else if (weaponnum==6){ //BOMB set_user_maxspeed(id,250.0) } } #endif new parm[1] parm[0]=id unholyspeed(parm) return PLUGIN_CONTINUE } public freezetimedone(id) { checkmap() if (warcraft3==false) return PLUGIN_CONTINUE if(playeritem2[id]==PROTECTANT){ new parm[2] parm[0]=id parm[1]=MOLE_PROTECTANT_TIME set_user_godmode(id,1) give_god(parm) } #if STEAM_POWERED set_user_maxspeed(id,240.0) #endif new parm[1] parm[0]=id set_task(0.1,"unholyspeed",19,parm,1) return PLUGIN_CONTINUE } public unholyspeed(parm[1]){ new id = parm[0] if (stunned[id]){ set_user_maxspeed(id,1.0) } else if (slowed[id]){ set_user_maxspeed(id,FROSTSPEED) } #if STEAM_POWERED else if (p_skills[id][0] == 1 && p_skills[id][2]){ // Unholy Aura if (get_user_maxspeed(id)>10 && get_user_maxspeed(id)!=p_unholy[p_skills[id][2]-1]){ set_user_maxspeed(id,(p_unholy[p_skills[id][2]-1])) } } #else else if (get_user_maxspeed(id)>10 && p_skills[id][0] == 1 && p_skills[id][2] && !freezetime){ // Unholy Aura if (get_user_maxspeed(id)!=p_unholy[p_skills[id][2]-1]){ set_user_maxspeed(id,(p_unholy[p_skills[id][2]-1])) } } #endif else if (get_user_maxspeed(id)>10 && playeritem[id]==BOOTS && !freezetime){ // Boots of Speed if (get_user_maxspeed(id)!=BOOTSPEED){ set_user_maxspeed(id,BOOTSPEED) } } return PLUGIN_CONTINUE } public say_level(id){ checkmap() if (warcraft3==false) return PLUGIN_CONTINUE displaylevel(id, 0) return PLUGIN_CONTINUE } public player_skills(id,saychat){ if (warcraft3==false) return PLUGIN_CONTINUE new name[32], message[2048] #if STEAM_POWERED new temp[1024] #else new temp[256] #endif new skill1[64], skill2[64], skill3[64], skill4[64] new players[32] new numberofplayers get_players(players, numberofplayers) new i new playerid #if STEAM_POWERED add(message,2047,"") #endif for (i = 0; i < numberofplayers; ++i){ skill1="" skill2="" skill3="" skill4="" playerid=players[i] get_user_name(playerid,name,31) if (p_skills[playerid][0]==1){ if(p_skills[playerid][1]) format(skill1,63,", %s %d",race1skill[0],p_skills[playerid][1]) if(p_skills[playerid][2]) format(skill2,63,", %s %d",race1skill[1],p_skills[playerid][2]) if(p_skills[playerid][3]) format(skill3,63,", %s %d",race1skill[2],p_skills[playerid][3]) if(p_skills[playerid][4]) format(skill4,63,", %s",race1skill[3]) #if STEAM_POWERED format(temp,1023,"%s - %s %d%s%s%s%s
",name,racename[1],p_level[playerid],skill1,skill2,skill3,skill4) #else format(temp,255,"%s - %s %d%s%s%s%s^n",name,racename[1],p_level[playerid],skill1,skill2,skill3,skill4) #endif } else if (p_skills[playerid][0]==2){ if(p_skills[playerid][1]) format(skill1,63,", %s %d",race2skill[0],p_skills[playerid][1]) if(p_skills[playerid][2]) format(skill2,63,", %s %d",race2skill[1],p_skills[playerid][2]) if(p_skills[playerid][3]) format(skill3,63,", %s %d",race2skill[2],p_skills[playerid][3]) if(p_skills[playerid][4]) format(skill4,63,", %s",race2skill[3]) #if STEAM_POWERED format(temp,1023,"%s - %s %d%s%s%s%s
",name,racename[2],p_level[playerid],skill1,skill2,skill3,skill4) #else format(temp,255,"%s - %s %d%s%s%s%s^n",name,racename[2],p_level[playerid],skill1,skill2,skill3,skill4) #endif } else if (p_skills[playerid][0]==3){ if(p_skills[playerid][1]) format(skill1,63,", %s %d",race3skill[0],p_skills[playerid][1]) if(p_skills[playerid][2]) format(skill2,63,", %s %d",race3skill[1],p_skills[playerid][2]) if(p_skills[playerid][3]) format(skill3,63,", %s %d",race3skill[2],p_skills[playerid][3]) if(p_skills[playerid][4]) format(skill4,63,", %s",race3skill[3]) #if STEAM_POWERED format(temp,1023,"%s - %s %d%s%s%s%s
",name,racename[2],p_level[playerid],skill1,skill2,skill3,skill4) #else format(temp,255,"%s - %s %d%s%s%s%s^n",name,racename[3],p_level[playerid],skill1,skill2,skill3,skill4) #endif } else if (p_skills[playerid][0]==4){ if(p_skills[playerid][1]) format(skill1,63,", %s %d",race4skill[0],p_skills[playerid][1]) if(p_skills[playerid][2]) format(skill2,63,", %s %d",race4skill[1],p_skills[playerid][2]) if(p_skills[playerid][3]) format(skill3,63,", %s %d",race4skill[2],p_skills[playerid][3]) if(p_skills[playerid][4]) format(skill4,63,", %s",race4skill[3]) #if STEAM_POWERED format(temp,1023,"%s - %s %d%s%s%s%s
",name,racename[4],p_level[playerid],skill1,skill2,skill3,skill4) #else format(temp,255,"%s - %s %d%s%s%s%s^n",name,racename[4],p_level[playerid],skill1,skill2,skill3,skill4) #endif } else if (p_skills[playerid][0]==5){ if(p_skills[playerid][1]) format(skill1,63,", %s %d",race5skill[0],p_skills[playerid][1]) if(p_skills[playerid][2]) format(skill2,63,", %s %d",race5skill[1],p_skills[playerid][2]) if(p_skills[playerid][3]) format(skill3,63,", %s %d",race5skill[2],p_skills[playerid][3]) if(p_skills[playerid][4]) format(skill4,63,", %s",race5skill[3]) #if STEAM_POWERED format(temp,1023,"%s - %s %d%s%s%s%s
",name,racename[5],p_level[playerid],skill1,skill2,skill3,skill4) #else format(temp,255,"%s - %s %d%s%s%s%s^n",name,racename[5],p_level[playerid],skill1,skill2,skill3,skill4) #endif } else if (p_skills[playerid][0]==6){ if(p_skills[playerid][1]) format(skill1,63,", %s %d",race6skill[0],p_skills[playerid][1]) if(p_skills[playerid][2]) format(skill2,63,", %s %d",race6skill[1],p_skills[playerid][2]) if(p_skills[playerid][3]) format(skill3,63,", %s %d",race6skill[2],p_skills[playerid][3]) if(p_skills[playerid][4]) format(skill4,63,", %s",race6skill[3]) #if STEAM_POWERED format(temp,1023,"%s - %s %d%s%s%s%s
",name,racename[6],p_level[playerid],skill1,skill2,skill3,skill4) #else format(temp,255,"%s - %s %d%s%s%s%s^n",name,racename[6],p_level[playerid],skill1,skill2,skill3,skill4) #endif } else if (p_skills[playerid][0]==7){ if(p_skills[playerid][1]) format(skill1,63,", %s %d",race7skill[0],p_skills[playerid][1]) if(p_skills[playerid][2]) format(skill2,63,", %s %d",race7skill[1],p_skills[playerid][2]) if(p_skills[playerid][3]) format(skill3,63,", %s %d",race7skill[2],p_skills[playerid][3]) if(p_skills[playerid][4]) format(skill4,63,", %s",race7skill[3]) #if STEAM_POWERED format(temp,1023,"%s - %s %d%s%s%s%s
",name,racename[7],p_level[playerid],skill1,skill2,skill3,skill4) #else format(temp,255,"%s - %s %d%s%s%s%s^n",name,racename[7],p_level[playerid],skill1,skill2,skill3,skill4) #endif } else if (p_skills[playerid][0]==8){ if(p_skills[playerid][1]) format(skill1,63,", %s %d",race8skill[0],p_skills[playerid][1]) if(p_skills[playerid][2]) format(skill2,63,", %s %d",race8skill[1],p_skills[playerid][2]) if(p_skills[playerid][3]) format(skill3,63,", %s %d",race8skill[2],p_skills[playerid][3]) if(p_skills[playerid][4]) format(skill4,63,", %s",race8skill[3]) #if STEAM_POWERED format(temp,1023,"%s - %s %d%s%s%s%s
",name,racename[8],p_level[playerid],skill1,skill2,skill3,skill4) #else format(temp,255,"%s - %s %d%s%s%s%s^n",name,racename[8],p_level[playerid],skill1,skill2,skill3,skill4) #endif } else if (p_skills[playerid][0]==0){ #if STEAM_POWERED format(temp,1023,"%s - race not yet selected
",name) #else format(temp,255,"%s - race not yet selected^n",name) #endif } add(message,2047,temp) } if (saychat==1){ show_motd(id,message,"Warcraft 3 XP Player Skills") return PLUGIN_CONTINUE } else{ console_print(id,message) } return PLUGIN_HANDLED } public skills_info(id,saychat){ checkmap() if (warcraft3==false) return PLUGIN_CONTINUE new message[2048] new title[64], temp[1024] #if STEAM_POWERED add(message,2047,"
Click here for more detailed information regarding the new races, etc.. 


") if (p_skills[id][0]==1){ format(title,63,"%s Skills",racename[1]) temp = "Vampiric Aura: Gives you (%d%%, %d%% or %d%%) of the damage you do in attack back as health

\ Unholy Aura: Gives you a speed boost, also all weapons make you go at the same speed

\ Levitation: Allows you to jump higher by reducing your gravity

\ Ultimate, Suicide Bomber: When you die you will explode killing nearby enemies and regenerate" format(temp,2047,temp,floatround(p_vampiric[0]*100),floatround(p_vampiric[1]*100),floatround(p_vampiric[2]*100)) } else if (p_skills[id][0]==2){ format(title,63,"%s Skills",racename[2]) temp = "Invisibility: Makes you partially invisible, you will be harder to see

\ Devotion Aura: Gives you (%d, %d or %d) health at the start of the round.

\ Bash: When you shoot someone you have a (%d%%, %d%% or %d%%) chance of rendering them immobile for 1 second

\ Ultimate, Teleport: Allows you to teleport to a team mate (10 seconds cooldown)" format(temp,2047,temp,p_devotion[0],p_devotion[1],p_devotion[2],floatround(p_bash[0]*100),floatround(p_bash[1]*100),floatround(p_bash[2]*100)) } else if (p_skills[id][0]==3){ format(title,63,"%s Skills",racename[3]) temp = "Critical Strike: Gives you a %d%% chance of doing (2, 3, or 4) times normal damage

\ Critical Grenade: Grenades will ALWAYS do (%d, %d or %d) times normal damage

\ Equipment Reincarnation: Gives you a (%d%%, %d%% or %d%%) chance of regaining your equipment on death

\ Ultimate, Chain Lightning: Discharges a bolt of lightning that jumps to all nearby enemies" format(temp,2047,temp,floatround(p_critical[0]*100),floatround(p_grenade[0])+1,floatround(p_grenade[1])+1,floatround(p_grenade[2])+1,floatround(p_ankh[0]*100),floatround(p_ankh[1]*100),floatround(p_ankh[2]*100)) } else if (p_skills[id][0]==4){ format(title,63,"%s Skills",racename[4]) temp = "Evasion: Gives you a (%d%%, %d%% or %d%%) chance of evading each shot

\ Thorns Aura: Does (%d%%, %d%% or %d%%) mirror damage to the person who shot you

\ Trueshot Aura: Does (%d%%, %d%% or %d%%) extra damage to the enemy

\ Ultimate, Entangle Roots: Allows you to prevent an enemy player from moving for 10 seconds" format(temp,2047,temp,floatround(p_evasion[0]*100),floatround(p_evasion[1]*100),floatround(p_evasion[2]*100),floatround(p_thorns[0]*100),floatround(p_thorns[1]*100),floatround(p_thorns[2]*100),floatround(p_trueshot[0]*100),floatround(p_trueshot[1]*100),floatround(p_trueshot[2]*100)) } else if (p_skills[id][0]==5){ format(title,63,"%s Skills",racename[5]) temp = "Pheonix: You have a (%d%%, %d%% or %d%%) chance of reviving the fist teammate who dies

\ Banish: You have a (%d%%, %d%% or %d%%) chance of moving your enemy

\ Siphon Mana: Steal (%d%%, %d%% or %d%%) armor from enemy (no limit)

\ Ultimate, Flame Strike: You receive a flame throwers (5 uses every 5 seconds)" format(temp,2047,temp,floatround(p_pheonix[0]*100),floatround(p_pheonix[1]*100),floatround(p_pheonix[2]*100),floatround(p_banish[0]*100),floatround(p_banish[1]*100),floatround(p_banish[2]*100),floatround(p_mana[0]*100),floatround(p_mana[1]*100),floatround(p_mana[2]*100)) } else if (p_skills[id][0]==6){ format(title,63,"%s Skills",racename[6]) temp = "Healing Wave: Every (%d%%, %d%% or %d%%) seconds you and your nearby teammates around you gain 1 HP

\ Hex: You have a (%d%%, %d%% or %d%%) chance of turning your enemy into a big goober

\ Serpent Ward: You receive (%d, %d or %d) serpent wards each round that damage nearby enemy units, bind a key to ability (or say ability) to plant one

\ Ultimate, Bid Bad Voodoo: Invincibility for 3 seconds" format(temp,2047,temp,floatround(p_heal[0]),floatround(p_heal[1]),floatround(p_heal[2]),floatround(p_hex[0]*100),floatround(p_hex[1]*100),floatround(p_hex[2]*100),p_serpent[0],p_serpent[1],p_serpent[2]) } else if (p_skills[id][0]==7){ format(title,63,"%s Skills",racename[7]) temp = "Fan of Knives: You have a (%d%%, %d%% or %d%%) chance of becoming a mole

\ Blink: Disables ALL enemy abilities (%d%%, %d%% or %d%%)

\ Shadow Strike: (inactive) You have a (%d%%, %d%% or %d%%) chance of hurling a poisoned dagger at the enemy

\ Ultimate, Vengeance: Respawn Indefinitely" format(temp,2047,temp,floatround(p_fan[0]*100),floatround(p_fan[1]*100),floatround(p_fan[2]*100),floatround(p_blink[0]*100),floatround(p_blink[1]*100),floatround(p_blink[2]*100),floatround(p_shadow[0]*100),floatround(p_shadow[1]*100),floatround(p_shadow[2]*100)) } else if (p_skills[id][0]==8){ format(title,63,"%s Skills",racename[8]) temp = "Impale: Currently only makes the enemy's screen shake...

\ Spiked Carapace: Does (%d%%, %d%% or %d%%) mirror damage to the person who shot you and you gain armor

\ Carrion Beetles: You have a (%d%%, %d%% or %d%%) chance of your 2 beetles attack the enemy when on target

\ Ultimate, Locust Swarm: A Swarm of Locusts attacks the enemy" format(temp,2047,temp,floatround(p_spiked[0]*100),floatround(p_spiked[1]*100),floatround(p_spiked[2]*100),floatround(p_carrion[0]),floatround(p_carrion[1]),floatround(p_carrion[2])) } else{ client_cmd(id,"echo You must select a race before viewing the skills information!") return PLUGIN_HANDLED } #else if (p_skills[id][0]==1){ format(title,63,"%s Skills",racename[1]) message = "Vampiric Aura: Gives you (%d%%, %d%% or %d%%) of the damage you do in attack back as health^n^n\ Unholy Aura: Gives you a speed boost, also all weapons make you go at the same speed^n^n\ Levitation: Allows you to jump higher by reducing your gravity^n^n\ Ultimate, Suicide Bomber: When you die you will explode killing nearby enemies" format(message,1023,message,floatround(p_vampiric[0]*100),floatround(p_vampiric[1]*100),floatround(p_vampiric[2]*100)) } else if (p_skills[id][0]==2){ format(title,63,"%s Skills",racename[2]) message = "Invisibility: Makes you partially invisible, you will be harder to see^n^n\ Devotion Aura: Gives you (%d, %d or %d) health at the start of the round.^n^n\ Bash: When you shoot someone you have a (%d%%, %d%% or %d%%) chance of rendering them immobile for 1 second^n^n\ Ultimate, Teleport: Allows you to teleport to a team mate (10 seconds cooldown)" format(message,1023,message,p_devotion[0],p_devotion[1],p_devotion[2],floatround(p_bash[0]*100),floatround(p_bash[1]*100),floatround(p_bash[2]*100)) } else if (p_skills[id][0]==3){ format(title,63,"%s Skills",racename[3]) message = "Critical Strike: Gives you a %d%% chance of doing (2, 3, or 4) times normal damage^n^n\ Critical Grenade: Grenades will ALWAYS do (%d, %d or %d) times normal damage^n^n\ Equipment Reincarnation: Gives you a (%d%%, %d%% or %d%%) chance of regaining your equipment on death^n^n\ Ultimate, Chain Lightning: Discharges a bolt of lightning that jumps to all nearby enemies" format(message,1023,message,floatround(p_critical[0]*100),floatround(p_grenade[0])+1,floatround(p_grenade[1])+1,floatround(p_grenade[2])+1,floatround(p_ankh[0]*100),floatround(p_ankh[1]*100),floatround(p_ankh[2]*100)) } else if (p_skills[id][0]==4){ format(title,63,"%s Skills",racename[4]) message = "Evasion: Gives you a (%d%%, %d%% or %d%%) chance of evading each shot^n^n\ Thorns Aura: Does (%d%%, %d%% or %d%%) mirror damage to the person who shot you^n^n\ Trueshot Aura: Does (%d%%, %d%% or %d%%) extra damage to the enemy^n^n\ Ultimate, Entangle Roots: Allows you to prevent an enemy player from moving for 10 seconds" format(message,1023,message,floatround(p_evasion[0]*100),floatround(p_evasion[1]*100),floatround(p_evasion[2]*100),floatround(p_thorns[0]*100),floatround(p_thorns[1]*100),floatround(p_thorns[2]*100),floatround(p_trueshot[0]*100),floatround(p_trueshot[1]*100),floatround(p_trueshot[2]*100)) } else if (p_skills[id][0]==5){ format(title,63,"%s Skills",racename[5]) temp = "Pheonix: You have a (%d%%, %d%% or %d%%) chance of reviving the fist teammate who dies^n^n\ Banish: You have a (%d%%, %d%% or %d%%) chance of moving your enemy^n^n\ Siphon Mana: Steal (%d%%, %d%% or %d%%) armor from enemy (no limit)^n^n\ Ultimate, Flame Strike: You receive a flame throwers (5 uses every 5 seconds)" format(message,1023,message,floatround(p_pheonix[0]*100),floatround(p_pheonix[1]*100),floatround(p_pheonix[2]*100),floatround(p_banish[0]*100),floatround(p_banish[1]*100),floatround(p_banish[2]*100),floatround(p_mana[0]*100),floatround(p_mana[1]*100),floatround(p_mana[2]*100)) } else if (p_skills[id][0]==6){ format(title,63,"%s Skills",racename[6]) temp = "Healing Wave: Every (%d%%, %d%% or %d%%) seconds you and your nearby teammates around you gain 1 HP^n^n\ Hex: You have a (%d%%, %d%% or %d%%) chance of turning your enemy into a big goober^n^n\ Serpent Ward: You receive (%d, %d or %d) serpent wards each round that damage nearby enemy units, bind a key to ability (or say ability) to plant one^n^n\ Ultimate, Bid Bad Voodoo: Invincibility for 3 seconds" format(message,1023,message,floatround(p_heal[0]),floatround(p_heal[1]),floatround(p_heal[2]),floatround(p_hex[0]*100),floatround(p_hex[1]*100),floatround(p_hex[2]*100),p_serpent[0],p_serpent[1],p_serpent[2]) } else if (p_skills[id][0]==7){ format(title,63,"%s Skills",racename[7]) temp = "Fan of Knives: You have a (%d%%, %d%% or %d%%) chance of becoming a mole^n^n\ Blink: Disables ALL enemy abilities (%d%%, %d%% or %d%%)^n^n\ Shadow Strike: (inactive) You have a (%d%%, %d%% or %d%%) chance of hurling a poisoned dagger at the enemy^n^n\ Ultimate, Vengeance: Respawn Indefinitely" format(message,1023,message,floatround(p_fan[0]*100),floatround(p_fan[1]*100),floatround(p_fan[2]*100),floatround(p_blink[0]*100),floatround(p_blink[1]*100),floatround(p_blink[2]*100),floatround(p_shadow[0]*100),floatround(p_shadow[1]*100),floatround(p_shadow[2]*100)) } else if (p_skills[id][0]==8){ format(title,63,"%s Skills",racename[8]) temp = "Impale: Currently only makes the enemy's screen shake...^n^n\ Spiked Carapace: Does (%d%%, %d%% or %d%%) mirror damage to the person who shot you and you gain armor^n^n\ Carrion Beetles: You have a (%d%%, %d%% or %d%%) chance of your 2 beetles attack the enemy when on target^n^n\ Ultimate, Locust Swarm: A Swarm of Locusts attacks the enemy" format(message,1023,message,floatround(p_spiked[0]*100),floatround(p_spiked[1]*100),floatround(p_spiked[2]*100),floatround(p_carrion[0]),floatround(p_carrion[1]),floatround(p_carrion[2])) } else{ client_cmd(id,"echo You must select a race before viewing the skills information!") return PLUGIN_HANDLED } #endif if(p_skills[id][0]!=0) add(message,1023,temp) show_motd(id,message,"Race Information") if (saychat==1) return PLUGIN_CONTINUE return PLUGIN_HANDLED } public items_info(id,saychat){ static title[64], text[2048], MSFilename[]="addons\amx\motds\itemsinfo.txt", UnixFilename[]="addons/amx/motds/itemsinfo.txt"; format(title,63,"Items Information") // Use same directory as "MY CUSTOM MOTD WINDOWS" from "Ludwig van" if( file_exists(MSFilename) ) show_motd(id,MSFilename,title); else if( file_exists(UnixFilename) ) show_motd(id,UnixFilename,title); else{ format( text, 2047, "There is no ^'itemsinfo.txt^' file installed !!!^nFor Microsoft-OS: %s^nFor *nix-OS: %s", MSFilename, UnixFilename); show_motd(id,text,title); } return PLUGIN_CONTINUE } public items_info2(id,saychat){ static title[64], text[2048], MSFilename[]="addons\amx\motds\itemsinfo2.txt", UnixFilename[]="addons/amx/motds/itemsinfo2.txt"; format(title,63,"Items2 Information") // Use same directory as "MY CUSTOM MOTD WINDOWS" from "Ludwig van" if( file_exists(MSFilename) ) show_motd(id,MSFilename,title); else if( file_exists(UnixFilename) ) show_motd(id,UnixFilename,title); else{ format( text, 2047, "There is no ^'itemsinfo2.txt^' file installed !!!^nFor Microsoft-OS: %s^nFor *nix-OS: %s", MSFilename, UnixFilename); show_motd(id,text,title); } return PLUGIN_CONTINUE } public war3_info(id){ console_print(id,"---- Warcraft 3 Help: Commands ----") console_print(id,"Client:") // Extra-Start: Added by Tri Moon, for WC3_Menu. console_print(id,"war3menu - - Show WarCraft3 XP Player menu") // Extra-End: Added by Tri Moon, for WC3_Menu. console_print(id,"selectskill - Allows you to select skills before the start of the next round") console_print(id,"changerace - Allows you to change race during the game if mp_allowchangerace is 1") console_print(id,"playerskills - Shows you what skills other players have chosen") console_print(id,"skillsinfo - Shows you what each skill does for the race you have selected") console_print(id,"itemsinfo - Shows you a list of items and what they do") console_print(id,"war3vote - Vote to switch the plugin on or off") console_print(id,"iamadirtycheater - if sv_cheats is 1 then it will set you to level 10") console_print(id,"cheatsoff - will set your level back to what it should be") console_print(id,"Server:") console_print(id,"sv_warcraft3 - Enable/Disable the plugin (default 1, enabled)") console_print(id,"sv_allowwar3vote - Enabled/Disable voting (default 1, enabled)") console_print(id,"sv_cheats - this is a standard HL cvar, but you need this if you want to cheat :)") console_print(id,"mp_allowchangerace - Allow people to change race during the game (default 0, disabled)") console_print(id,"mp_forceskin - Forces player to choose skin according to race (default 0, disabled)") console_print(id,"mp_grenadeprotection - prevents buying more than 1 HE gren per round (default 1, enabled)") console_print(id,"mp_weaponxpmodifier - gives additional XP for using certain weaker weapons (default 1, enabled)") console_print(id,"mp_savexp - save XP to a txt file and restore it when player reconnects (default 0)") console_print(id,"mp_xpmultiplier - set the level required to gain a level as a multiple (default 1.0)") console_print(id,"sv_daysbeforedelete - see warcraft3.txt for more info on this (default 1)") console_print(id,"sv_dayslevelmodifier - see warcraft3.txt for more info on this (default 3)") console_print(id,"---- Warcraft 3 Help: Commands ----") return PLUGIN_HANDLED } public saywar3_info(id){ // Extra-Start: Changed by Tri Moon, for WC3_Menu. // Extra-Start: Changed by Tri Moon, bugfix v2.20.5: "war3info.txt" was not displayed on Unix machines. static title[64], text[2048], MSFilename[]="addons\amx\motds\war3info.txt", UnixFilename[]="addons/amx/motds/war3info.txt"; format(title,63,"Warcraft 3 Help") // Use same directory as "MY CUSTOM MOTD WINDOWS" from "Ludwig van" if( file_exists(MSFilename) ) show_motd(id,MSFilename,title); else if( file_exists(UnixFilename) ) show_motd(id,UnixFilename,title); else{ format( text, 2047, "There is no ^'war3info.txt^' file installed !!!^nFor Microsoft-OS: %s^nFor *nix-OS: %s", MSFilename, UnixFilename); show_motd(id,text,title); } // Extra-End: Changed by Tri Moon, bugfix v2.20.5: "war3info.txt" was not displayed on Unix machines. // Extra-End: Changed by Tri Moon, for WC3_Menu. return PLUGIN_CONTINUE } public cheat(id){ checkmap() if (warcraft3==false) return PLUGIN_CONTINUE if (get_cvar_num("sv_cheats")!=1) return PLUGIN_CONTINUE cheatson[id]=true client_cmd(id,"echo You are now level 10, select your skills from the menu") displaylevel(id, 1) new skillsused = p_skills[id][1]+p_skills[id][2]+p_skills[id][3]+p_skills[id][4] if (skillsused < p_level[id]){ select_skill(id,0) } return PLUGIN_HANDLED } public cheatsoff(id){ checkmap() if (warcraft3==false) return PLUGIN_CONTINUE if (get_cvar_num("sv_cheats")!=1) return PLUGIN_CONTINUE cheatson[id]=false client_cmd(id,"echo You correct level is now set, select your skills from the menu") p_skills[id][1]=0 p_skills[id][2]=0 p_skills[id][3]=0 p_skills[id][4]=0 displaylevel(id, 1) new skillsused = p_skills[id][1]+p_skills[id][2]+p_skills[id][3]+p_skills[id][4] if (skillsused < p_level[id]){ select_skill(id,0) } return PLUGIN_HANDLED } public ultimate(id){ checkmap() if (warcraft3==false) return PLUGIN_CONTINUE if (get_cvar_num("sv_restrictultimate")==0 && !reseting[id] && !ultimateused[id]){ new parm[2] parm[0]=id set_task(7.5,"resetultimate",2,parm,2) reseting[id]=true } if (is_user_alive(id)){ if (p_skills[id][0]==1 && p_skills[id][4]==1){ user_kill(id,1) } if (p_skills[id][0]==6 && p_skills[id][4]==1 && !godused[id]){ new parm[2] parm[0]=id parm[1]=3 set_user_godmode(id,1) give_god(parm) client_print(id,print_chat,"You are GOD, but not for long!") godused[id]=true } if (p_skills[id][0]==5 && p_skills[id][4]==1 && !ultimateused[id]){ //Flame Strike fire_flamethrower(id) flame_count[id]++ if(flame_count[id]>4){ ultimateused[id]=true flame_count[id] =0 } } if (p_skills[id][0]==2 && p_skills[id][4]==1 && !ultimateused[id] && !endround){ // Teleport new i new j new tmp new numberofplayers new targetid new targetid2 new teamname[32] new distancebetween new distancebetween2 new origin[3] new targetorigin[3] new targetorigin2[3] get_user_team(id, teamname, 31) get_players(teleportid[id],numberofplayers,"ae",teamname) get_user_origin(id,origin) for (i=0; i 9) numberofplayers=9 else --numberofplayers // Remove self from list if (numberofplayers){ remove_task(666+id) teleportmenu[id]=true new menuparm[2] menuparm[0]=id menuparm[1]=numberofplayers telemenu(menuparm) } else{ set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 2) show_hudmessage(id,"No valid teleport targets found!") } } else if (!issearching[id] && p_skills[id][0]==3 && p_skills[id][4]==1 && !ultimateused[id]){ new parm[2] parm[0]=id parm[1]=ULTIMATESEARCHTIME lightsearchtarget(parm) // Chain Lightning } else if (!issearching[id] && p_skills[id][0]==4 && p_skills[id][4]==1 && !ultimateused[id]){ new parm[2] parm[0]=id parm[1]=ULTIMATESEARCHTIME searchtarget(parm) // Entangle Roots } else if (!issearching[id] && p_skills[id][0]==8 && p_skills[id][4]==1 && !ultimateused[id]){ new parm[2] parm[0]=id parm[1]=ULTIMATESEARCHTIME locustsearchtarget(parm) // Locust swarm } } return PLUGIN_HANDLED } public telemenu(parm[2]){ new id = parm[0] new numberofplayers = parm[1] new targetid new name[32] new origin[3] new targetorigin[3] new distancebetween new temp[64] new i new keys = (1<<9) new menu_body[512]="\yTeleport to:\w^n" get_user_origin(id,origin) for (i = 0; i < numberofplayers; ++i){ targetid=teleportid[id][i] get_user_name(targetid,name,31) get_user_origin(targetid,targetorigin) distancebetween = get_distance(origin,targetorigin) if (is_user_alive(targetid)){ format(temp,63,"^n\w%d. %s (\y%dm\w)",i+1,name,distancebetween/40) keys |= (1<10 && get_user_team(id)!=get_user_team(enemy) && playeritem[enemy]!=IMMUNITY && !hasblink[enemy]){ issearching[id]=false ultimateused[id]=true message_begin( MSG_BROADCAST, SVC_TEMPENTITY ); write_byte( TE_BEAMFOLLOW ); write_short(enemy); // entity write_short(m_iTrail ); // model write_byte( 10 ); // life write_byte( 5 ); // width write_byte( 10 ); // r, g, b write_byte( 108 ); // r, g, b write_byte( 23 ); // r, g, b write_byte( 255 ); // brightness message_end(); // move PHS/PVS data sending into here (SEND_ALL, SEND_PVS, SEND_PHS) if (file_exists("sound/warcraft3/EntanglingRootsTarget1.wav")==1) emit_sound(id,CHAN_ITEM, "warcraft3/EntanglingRootsTarget1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) else emit_sound(id,CHAN_ITEM, "weapons/cbar_hitbod3.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) new waitparm[6] waitparm[0]=enemy waitparm[1]=100 waitparm[5]=floatround(get_user_maxspeed(enemy)) set_user_maxspeed(enemy,1.0) stunned[enemy]=true waitstop(waitparm) new cooldownparm[1] cooldownparm[0]=id set_task(ENTANGLEROOTS_COOLDOWN,"cooldown",20,cooldownparm,1) } else{ issearching[id]=true new counter = parm[1] while (counter >= 0){ counter -= 10 if (counter==0) emit_sound(id,CHAN_ITEM, "turret/tu_ping.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) } --parm[1] if (parm[1]>0 && get_user_health(id)>0) set_task(0.1,"searchtarget",21,parm,2) else issearching[id]=false } return PLUGIN_CONTINUE } public cham(parm[2]){ new id = parm[0] new enemy, body get_user_aiming(id,enemy,body) if (0 -40){ message_begin( MSG_BROADCAST, SVC_TEMPENTITY ) write_byte( 0 ) write_coord(origin[0]+x1) write_coord(origin[1]+y1) write_coord(origin[2]+height) write_coord(origin[0]+x2) write_coord(origin[1]+y2) write_coord(origin[2]+height+2) write_short(iBeam4) // model write_byte( 0 ) // start frame write_byte( 0 ) // framerate write_byte( life ) // life write_byte( 10 ) // width write_byte( 5 ) // noise write_byte( 10 ) // r, g, b write_byte( 108 ) // r, g, b write_byte( 23 ) // r, g, b write_byte( 255 ) // brightness write_byte( 0 ) // speed message_end() height -= 16 } } return PLUGIN_CONTINUE } public lightsearchtarget(parm[2]){ new id = parm[0] new enemy, body get_user_aiming(id,enemy,body) if ( 0= 0){ counter -= 10 if (counter==0) emit_sound(id,CHAN_ITEM, "turret/tu_ping.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) } --parm[1] if (parm[1]>0 && get_user_health(id)>=0) set_task(0.1,"lightsearchtarget",26,parm,2) else issearching[id]=false } return PLUGIN_CONTINUE } public lightningnext(parm[4]){ // Chain Lightning new id=parm[0] new caster=parm[3] new origin[3] get_user_origin(id, origin) new players[32] new teamname[32] get_user_team(id, teamname, 31) new numberofplayers get_players(players, numberofplayers,"ae",teamname) new i new targetid = 0 new distancebetween = 0 new targetorigin[3] new damage = parm[1]*2/3 new linewidth = parm[2]*2/3 new closestdistance = 0 new closestid = 0 for (i = 0; i < numberofplayers; ++i){ targetid=players[i] if (get_user_team(id)==get_user_team(targetid) && is_user_alive(targetid)){ get_user_origin(targetid,targetorigin) distancebetween=get_distance(origin,targetorigin) if (distancebetween < LIGHTNING_RANGE && !lightninghit[targetid] && playeritem[targetid]!=IMMUNITY && !hasblink[targetid]){ if (distancebetween < closestdistance || closestid==0){ closestdistance = distancebetween closestid = targetid } } } } if (closestid){ lightningeffect(id,closestid,linewidth,damage,caster) parm[0]=targetid parm[1]=damage parm[2]=linewidth parm[3]=caster set_task(0.2,"lightningnext",27,parm,4) } else{ for (i = 0; i < numberofplayers; ++i){ targetid=players[i] lightninghit[targetid]=false } } return PLUGIN_CONTINUE } public lightningeffect(id,targetid,linewidth,damage,caster){ new bool:targetdied new bool:targetdead lightninghit[targetid]=true targetdead=false if (is_user_alive(targetid)) targetdead=false else targetdead=true if (get_user_health(targetid)>500){ // Evasion kill if (get_user_health(targetid)-damage<=1024){ set_user_health(targetid, -1) targetdied=true } } else if (get_user_health(targetid)-damage<=0) targetdied=true set_user_health(targetid,get_user_health(targetid)-damage) if (get_user_armor(targetid)-damage<=0) set_user_armor(targetid,0) else set_user_armor(targetid,get_user_armor(targetid)-damage) if (targetdied && !targetdead){ set_user_frags(caster, get_user_frags(caster)+1) set_user_frags(targetid, get_user_frags(targetid)+1) message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0) write_byte(caster) write_byte(targetid) write_byte(0) write_string(race3skill[3]) message_end() playerxp[caster]+=xpgiven[p_level[targetid]] displaylevel(caster, 1) } message_begin( MSG_BROADCAST, SVC_TEMPENTITY ); write_byte( TE_BEAMENTS ); write_short(id); // start entity write_short(targetid); // entity write_short(lightning ); // model write_byte( 0 ); // starting frame write_byte( 15 ); // frame rate write_byte( 10 ); // life write_byte( linewidth ); // line width write_byte( 10 ); // noise amplitude write_byte( 255 ); // r, g, b write_byte( 255 ); // r, g, b write_byte( 255 ); // r, g, b write_byte( 255 ); // brightness write_byte( 0 ); // scroll speed message_end(); new origin[3] get_user_origin(targetid,origin) message_begin( MSG_BROADCAST, SVC_TEMPENTITY ); write_byte( TE_ELIGHT ); write_short(targetid); // entity write_coord(origin[0]) // initial position write_coord(origin[1]) // initial position write_coord(origin[2]) // initial position write_coord(100) // radius write_byte( 255 ); // r, g, b write_byte( 255 ); // r, g, b write_byte( 255 ); // r, g, b write_byte( 10 ); // life write_coord(0) // decay rate message_end(); if (file_exists("sound/warcraft3/LightningBolt.wav")==1) emit_sound(id,CHAN_ITEM, "warcraft3/LightningBolt.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) else emit_sound(id,CHAN_ITEM, "weapons/gauss2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) return PLUGIN_CONTINUE } public cooldown(parm[1]){ ultimateused[parm[0]]=false return PLUGIN_CONTINUE } public telewaitstop(parm[6]){ new id=parm[0] new origin[3] get_user_origin(id, origin) if (origin[0]==parm[2] && origin[1]==parm[3] && origin[2]==parm[4]){ new normalspeed = parm[5] new resetparm[2] resetparm[0]=id resetparm[1]=normalspeed set_task(0.6,"reset_maxspeed",28,resetparm,2) new teleportparm[6] teleportparm[0]=parm[0] teleportparm[1]=parm[1] teleport(teleportparm) } else{ parm[2]=origin[0] parm[3]=origin[1] parm[4]=origin[2] set_task(0.1,"telewaitstop",29,parm,6) } return PLUGIN_CONTINUE } public teleport(parm[6]){ // Teleport new id=parm[0] new thetarget=parm[1] new origin[3] get_user_origin(id,origin) new targetorigin[3] targetorigin[0]=parm[3] targetorigin[1]=parm[4] targetorigin[2]=parm[5] if (parm[2]==0){ if (file_exists("sound/warcraft3/MassTeleportTarget.wav")==1) emit_sound(id,CHAN_STATIC, "warcraft3/MassTeleportTarget.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) else emit_sound(id,CHAN_STATIC, "x/x_shoot1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) if (p_skills[id][1]==0 && playeritem[id]!=CLOAK){ // Don't glow if player is invisible set_user_rendering(id,kRenderFxNone, 0,0,0, kRenderTransAdd,255) } // blast circles message_begin( MSG_PAS, SVC_TEMPENTITY, origin ) write_byte( TE_BEAMCYLINDER ) write_coord( origin[0]) write_coord( origin[1]) write_coord( origin[2] + 10) write_coord( origin[0]) write_coord( origin[1]) write_coord( origin[2] + 10 + TELEPORT_RADIUS) write_short( m_iSpriteTexture ) write_byte( 0 ) // startframe write_byte( 0 ) // framerate write_byte( 3 ) // life write_byte( 60 ) // width write_byte( 0 ) // noise write_byte( 255 ) // red write_byte( 255 ) // green write_byte( 255 ) // blue write_byte( 255 ) //brightness write_byte( 0 ) // speed message_end() get_user_origin(thetarget,targetorigin) if (file_exists("sound/warcraft3/MassTeleportTarget.wav")==1) emit_sound(thetarget,CHAN_STATIC, "warcraft3/MassTeleportTarget.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) else emit_sound(thetarget,CHAN_STATIC, "x/x_shoot1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) message_begin( MSG_PAS, SVC_TEMPENTITY, origin ) write_byte( TE_BEAMCYLINDER ) write_coord( targetorigin[0]) write_coord( targetorigin[1]) write_coord( targetorigin[2] + 90) write_coord( targetorigin[0]) write_coord( targetorigin[1]) write_coord( targetorigin[2] + 90 + TELEPORT_RADIUS) write_short( m_iSpriteTexture ) write_byte( 0 ) // startframe write_byte( 0 ) // framerate write_byte( 3 ) // life write_byte( 60 ) // width write_byte( 0 ) // noise write_byte( 255 ) // red write_byte( 255 ) // green write_byte( 255 ) // blue write_byte( 255 ) //brightness write_byte( 0 ) // speed message_end() parm[3]=targetorigin[0] parm[4]=targetorigin[1] parm[5]=targetorigin[2] } if (parm[2]==1){ targetorigin[2]+=80 if (p_skills[id][1]==0 && playeritem[id]!=CLOAK){ // Don't glow if player is invisible set_user_rendering(id,kRenderFxNone, 0,0,0, kRenderTransTexture,128) } set_user_origin(id, targetorigin) message_begin( MSG_BROADCAST, SVC_TEMPENTITY ) write_byte( TE_SPRITETRAIL ) write_coord( origin[0]) write_coord( origin[1]) write_coord( origin[2] + 40) write_coord( origin[0]) write_coord( origin[1]) write_coord( origin[2]) write_short( flaresprite ) write_byte( 30 ) // count write_byte( 10 ) // life write_byte( 1 ) // scale write_byte( 50 ) // velocity write_byte( 10 ) // randomness in velocity message_end() new fadeinparm[3] fadeinparm[0]=id fadeinparm[1]=3 fadeinparm[2]=targetorigin[2] teleportfadein(fadeinparm) } ++parm[2] if (parm[2]<2) set_task(0.3,"teleport",30,parm,6) return PLUGIN_CONTINUE } public teleportfadein(parm[3]){ new id = parm[0] if (parm[1]==3 && p_skills[id][1]==0 && playeritem[id]!=CLOAK) // Don't glow if player is invisible set_user_rendering(id,kRenderFxNone, 0,0,0, kRenderTransTexture,170) if (parm[1]==2 && p_skills[id][1]==0 && playeritem[id]!=CLOAK) // Don't glow if player is invisible set_user_rendering(id,kRenderFxNone, 0,0,0, kRenderTransTexture,212) if (parm[1]==1){ if (p_skills[id][1]==0 && playeritem[id]!=CLOAK){ // Don't glow if player is invisible set_user_rendering(id) } new origin[3] get_user_origin(id,origin) if (origin[2]==parm[2]){ origin[2]-=80 new unstickparm[4] unstickparm[0]=id unstickparm[1]=origin[0] unstickparm[2]=origin[1] unstickparm[3]=origin[2] unstick(unstickparm) } } --parm[1] if (parm[1]>0) set_task(0.1,"teleportfadein",31,parm,3) return PLUGIN_CONTINUE } public unstick(parm[4]){ new id=parm[0] new origin[3] new targetorigin[3] origin[0]=parm[1] origin[1]=parm[2] origin[2]=parm[3] new players[32] new numberofplayers get_players(players, numberofplayers) new i new playerid new bool:clear clear = true new distancebetween new tolerance = 100 for (i = 0; i < numberofplayers; ++i){ playerid=players[i] get_user_origin(playerid,targetorigin) distancebetween = get_distance(origin,targetorigin) if (distancebetween500){ // Evasion kill if (get_user_health(targetid)-damage<=1024){ set_user_health(targetid, -1) targetdied=true } } if (get_user_health(targetid)-damage<=0) targetdied=true set_user_health(targetid, get_user_health(targetid)-damage) if (targetdied && !targetdead){ set_user_frags(id, get_user_frags(id)+1) set_user_frags(targetid, get_user_frags(targetid)+1) message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0) write_byte(id) write_byte(targetid) write_byte(0) write_string(race1skill[3]) message_end() playerxp[id]+=xpgiven[p_level[targetid]] displaylevel(id, 1) } } if (distancebetween < EXPLOSION_RANGE){ message_begin(MSG_ONE,gmsgShake,{0,0,0},targetid) write_short( 1<<14 )// amplitude write_short( 1<<13 )// duration write_short( 1<<14 )// frequency message_end() } } --parm[1] if (parm[1]>0) set_task(0.1,"apacheexplode",33,parm,2) return PLUGIN_CONTINUE } public blastcircles(parm[2]){ new id = parm[0] new origin[3] get_user_origin(id,origin) // blast circles message_begin( MSG_PAS, SVC_TEMPENTITY, origin ) write_byte( TE_BEAMCYLINDER ) write_coord( origin[0]) write_coord( origin[1]) write_coord( origin[2] - 16) write_coord( origin[0]) write_coord( origin[1]) write_coord( origin[2] - 16 + BLASTCIRCLES_RADIUS) write_short( m_iSpriteTexture ) write_byte( 0 ) // startframe write_byte( 0 ) // framerate write_byte( 6 ) // life write_byte( 16 ) // width write_byte( 0 ) // noise write_byte( 188 ) write_byte( 220 ) write_byte( 255 ) write_byte( 255 ) //brightness write_byte( 0 ) // speed message_end() message_begin( MSG_PAS, SVC_TEMPENTITY, origin ) write_byte( TE_BEAMCYLINDER ) write_coord( origin[0]) write_coord( origin[1]) write_coord( origin[2] - 16) write_coord( origin[0]) write_coord( origin[1]) write_coord( origin[2] - 16 + ( BLASTCIRCLES_RADIUS / 2 )) write_short( m_iSpriteTexture ) write_byte( 0 ) // startframe write_byte( 0 ) // framerate write_byte( 6 ) // life write_byte( 16 ) // width write_byte( 0 ) // noise write_byte( 188 ) write_byte( 220 ) write_byte( 255 ) write_byte( 255 ) //brightness write_byte( 0 ) // speed message_end() return PLUGIN_CONTINUE } public sqrt(num) { new div = num new result = 1 while (div > result) { // end when div == result, or just below div = (div + result) / 2 // take mean value as new divisor result = num / div } return div } public client_connect(id){ g_specMode[id] = false p_skills[id][0] = 0 p_skills[id][1] = 0 p_skills[id][2] = 0 p_skills[id][3] = 0 p_skills[id][4] = 0 p_level[id] = 0 playerxp[id] = 0 playeritem[id] = 0 playeritem2[id] = 0 isburning[id] = 0 cheatson[id]=false if (is_user_bot(id) && savexp){ playerxp[id]=xplevel[floatround(random_float(0.0,3.16)*random_float(0.0,3.16))] p_skills[id][0] = random_num(1,8) return PLUGIN_CONTINUE } return PLUGIN_CONTINUE } public client_disconnect(id){ g_specMode[id] = false if (savexp && !is_user_bot(id) && p_skills[id][0] && playerxp[id]){ addtosavequeue(id) } isburning[id] = 0 return PLUGIN_CONTINUE } public addtosavequeue(id){ if (p_skills[id][0] && playerxp[id]){ new playerid[32], playername[32], timet[32], i=0 get_user_authid(id,playerid,31) // by ip while (!equal(savedline[i],"") && i<64){ i++ } if (i>=64) return PLUGIN_CONTINUE get_time("%m %d %H %M",timet,31) get_user_name(id,playername,31) format(savedline[i], 127, "%s ^"%s^" %d %d %d %d %d %d %s",playerid,playername,playerxp[id], p_skills[id][0],p_skills[id][1],p_skills[id][2],p_skills[id][3],p_skills[id][4], timet) } return PLUGIN_CONTINUE } public forceskin(id,key){ checkmap() if (warcraft3==false) return PLUGIN_CONTINUE changingteam[id]=false if (p_skills[id][0]!=0){ new skin[2] num_to_str(p_skills[id][0],skin,1) engclient_cmd(id,"menuselect",skin) return PLUGIN_HANDLED } else{ if (savexp){ if (maxgetxptime > get_gametime()) get_xp_from_file(id,1) else readxp[id]=1 } else select_race(id) } return PLUGIN_CONTINUE } public auto_join(id){ checkmap() if (warcraft3==false) return PLUGIN_CONTINUE changingteam[id]=true new vguimenus[8] get_user_info(id,"_vgui_menus",vguimenus,7) if (get_cvar_num("mp_forceskin")==0 || str_to_num(vguimenus)==1) return PLUGIN_CONTINUE if (p_skills[id][0]==0){ new parm[1] parm[0]=id set_task(1.0,"auto_join_delay",34,parm,1) } return PLUGIN_CONTINUE } public auto_join_delay(parm[1]){ new id = parm[0] if (p_skills[id][0]==0){ set_task(1.0,"auto_join_delay",35,parm,1) if (!savexp) select_race(id) } return PLUGIN_CONTINUE } public auto_skin(id){ if (warcraft3==false || get_cvar_num("mp_forceskin")==0) return PLUGIN_CONTINUE client_cmd(id,"slot5") // Clear the menu, correct skin will be select automatically return PLUGIN_CONTINUE } public war3_vote(id,saychat) { if (get_cvar_num("sv_allowwar3vote")==0) return PLUGIN_CONTINUE if (voting > get_gametime()){ console_print(id,"There is already one voting...") return PLUGIN_HANDLED } if (voting > 0.0 && voting + get_cvar_float("amx_vote_delay") > get_gametime()) { console_print(id,"Voting not allowed at this time") return PLUGIN_HANDLED } if (!allowedmap){ console_print(id,"Warcraft 3 is disabled on this map") return PLUGIN_HANDLED } new keys = (1<<0)|(1<<1) new menu_msg[256] checkmap() if (warcraft3==false) format(menu_msg,255,"\yEnable Warcraft 3 Plugin:\w^n^n1. Yes^n2. No") else format(menu_msg,255,"\yDisable Warcraft 3 Plugin:\w^n^n1. Yes^n2. No") new Float:vote_time = get_cvar_float("amx_vote_time") + 2.0 voting = get_gametime() + vote_time vote_ratio = get_cvar_float("amx_votewar3_ratio") show_menu(0,keys,menu_msg,floatround(vote_time)) set_task(vote_time,"check_votes") console_print(id,"Voting has started...") option=0 if (saychat==1) return PLUGIN_CONTINUE return PLUGIN_HANDLED } public vote_count(id,key){ if (get_cvar_float("amx_vote_answers")) { new name[32] get_user_name(id,name,31) client_print(0,print_chat,"* %s voted %s",name,key ? "against" : "for" ) } if (!key) ++option return PLUGIN_HANDLED } public check_votes() { new status[32] new players[32], inum get_players(players,inum,"c") new Float:result_v = inum ? (float(option) / float(inum)) : 0.0 if (result_v=1 && str_to_num(race)<=8) racexp[str_to_num(race)-1] = str_to_num(xp) } } } while (nextline) } if (returnrace){ if (p_skills[id][0]) racexp[p_skills[id][0]-1]=playerxp[id] server_cmd("display_race_select %d %d %d %d %d %d %d %d %d",id, racexp[0], racexp[1], racexp[2], racexp[3], racexp[4], racexp[5], racexp[6], racexp[7]) } else if (!nextline){ playerxp[id]=0 p_skills[id][1]=0 p_skills[id][2]=0 p_skills[id][3]=0 p_skills[id][4]=0 displaylevel(id,0) } } else{ new mquery[1024] if (returnrace) { if (get_cvar_num("mp_savebyname")==1) format(mquery, 1023, "SELECT * FROM `%s` WHERE playername='%s'",mysqltablename,playername) else format(mquery, 1023, "SELECT * FROM `%s` WHERE playerid='%s'",mysqltablename,playerid) mysql_query(mysql,mquery) mysql_check_error() while (mysql_nextrow(mysql)) { mysql_getfield(mysql,3,xp,7) mysql_getfield(mysql,4,race,1) if (str_to_num(race)>=1 && str_to_num(race)<=8) racexp[str_to_num(race)-1] = str_to_num(xp) mysql_check_error() } if (p_skills[id][0]) racexp[p_skills[id][0]-1]=playerxp[id] server_cmd("display_race_select %d %d %d %d %d %d %d %d %d",id, racexp[0], racexp[1], racexp[2], racexp[3], racexp[4], racexp[5], racexp[6], racexp[7]) } else { if (get_cvar_num("mp_savebyname")==1) format(mquery, 1023, "SELECT * FROM `%s` WHERE playername='%s' AND race='%d'",mysqltablename,playername,p_skills[id][0]) else format(mquery, 1023, "SELECT * FROM `%s` WHERE playerid='%s' AND race='%d'",mysqltablename,playerid,p_skills[id][0]) mysql_query(mysql,mquery) mysql_check_error() if (mysql_nextrow(mysql)){ mysql_getfield(mysql,3,xp,7) mysql_getfield(mysql,5,skill1,1) mysql_getfield(mysql,6,skill2,1) mysql_getfield(mysql,7,skill3,1) mysql_getfield(mysql,8,skill4,1) playerxp[id]=str_to_num(xp) p_skills[id][1]=str_to_num(skill1) p_skills[id][2]=str_to_num(skill2) p_skills[id][3]=str_to_num(skill3) p_skills[id][4]=str_to_num(skill4) displaylevel(id,0) } else{ playerxp[id]=0 p_skills[id][1]=0 p_skills[id][2]=0 p_skills[id][3]=0 p_skills[id][4]=0 displaylevel(id,0) } } } return PLUGIN_CONTINUE } public display_race_select(){ new id, idtext[3], menu_msg[256] new racexp1[8], racexp2[8], racexp3[8], racexp4[8], racexp5[8], racexp6[8], racexp7[8], racexp8[8] read_argv(1,idtext,2) read_argv(2,racexp1,7) read_argv(3,racexp2,7) read_argv(4,racexp3,7) read_argv(5,racexp4,7) read_argv(6,racexp5,7) read_argv(7,racexp6,7) read_argv(8,racexp7,7) read_argv(9,racexp8,7) id = str_to_num(idtext) format(menu_msg,255,"\ySelect Race:\RExperience^n^n\w1. %s\y\R%s^n\w2. %s\y\R%s^n\w3. %s\y\R%s^n\w4. %s\y\R%s^n\w5. %s\y\R%s^n\w6. %s\y\R%s^n\w7. %s\y\R%s^n\w8. %s\y\R%s^n^n\ \w9. Auto-select", racename[1], racexp1, racename[2], racexp2, racename[3], racexp3, racename[4], racexp4, racename[5], racexp5, racename[6], racexp6, racename[7], racexp7, racename[8], racexp8) show_menu(id,(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9),menu_msg,-1) return PLUGIN_HANDLED } public mysql_check_error(){ new merror[256] mysql_error(mysql,merror,255) if (merror[0]) { server_print("MYSQL Error Query: %s", merror) } } public remove_empty_lines(){ if(!mysqlcvar){ new nextline=0 new textline[128], textlength new tempfile[32]="war3user.tmp" if (file_exists(tempfile)) delete_file(tempfile) if (file_exists(XPFILENAME) && !file_exists(tempfile)){ do{ nextline=read_file(XPFILENAME,nextline,textline,127,textlength) if (textlength && nextline){ write_file(tempfile,textline,-1) } } while (nextline) if (delete_file(XPFILENAME)){ do{ nextline=read_file(tempfile,nextline,textline,127,textlength) if (textlength && nextline){ write_file(XPFILENAME,textline,-1) } } while (nextline) } delete_file(tempfile) } } return PLUGIN_CONTINUE } public plugin_end(){ if (!warcraft3 || !savexp) return PLUGIN_CONTINUE update_file(0) change_map() if (mysqlcvar) mysql_close(mysql) return PLUGIN_CONTINUE } public change_map(){ if (!savexp || !warcraft3) return PLUGIN_CONTINUE new nextline=0 new textline[128], textlength, playerid[32], playername[32] new xp[8], race[2], skill1[2], skill2[2], skill3[2], skill4[2] new month[3], day[3], hour[3], minutes[3], temp[3], timet[32] new currentmonth[3], currentday[3], currenthour[3],dayofyear, currentdayofyear new xpnumber, i, playerlevel new daysinmonth[12] = {31,28,31,30,31,30,31,31,30,31,30,31} // get_write_all(2) if(!mysqlcvar){ if (file_exists(XPFILENAME)){ do{ nextline=read_file(XPFILENAME,nextline,textline,127,textlength) if (contain(textline,"##")==0){ parse(textline, temp,2, month,2, day,2, hour,2, minutes,2) break } } while (nextline) get_time("%d",currentday,2) get_time("%m",currentmonth,2) get_time("%H",currenthour,2) if (!equal(currentday,day,2) || !equal(currentmonth,month,2)){ client_print(0,print_chat,"Updating %s...",XPFILENAME) get_time("%m %d %H %M",timet,31) format(textline, 127, "## %s", timet) write_file(XPFILENAME,textline,nextline-1) currentdayofyear = str_to_num(currentday) for (i=1; i=xplevel[i]) playerlevel=i else break } dayofyear = str_to_num(day)+daysbeforedelete+(playerlevel/dayslevelmodifier) for (i=1; i365) dayofyear-=365 if (dayofyear <= currentdayofyear){ write_file(XPFILENAME,"",nextline-1) } } } while (nextline) remove_empty_lines() } } } return PLUGIN_CONTINUE } public update_file(tid){ new i for (i=0; i<64; i++){ if (!equal(savedline[i],"")){ write_xp_to_file(0,savedline[i]) } savedline[i]="" } if (lastupdate + 600.0 < get_gametime()){ write_all() } lastupdate = get_gametime() // in seconds return PLUGIN_CONTINUE } public set_longtermxp(){ new textline[64], nextline=0, textlength, mapname[64] new filename[32] = "war3maps.ini" get_mapname(mapname,63) if (file_exists(filename)){ do{ nextline = read_file(filename,nextline,textline,63,textlength) if (equal(textline,mapname)) return PLUGIN_CONTINUE } while(nextline) } if (get_cvar_num("mp_savexp")){ new Float:xpmultiplier=get_cvar_float("mp_xpmultiplier") savexp=true xpgiven = {6,8,10,12,14,16,20,24,28,32,40} BOMBPLANTXP /= 10 DEFUSEXP /= 10 HOSTAGEXP /= 10 KILLRESCUEMANXP /= 10 XPBONUS /= 10 xplevel = {0,100,200,400,800,1600,3200,6400,12800,25600,51200} for (new i=0; i<11; i++){ xplevel[i] = floatround(xplevel[i] * xpmultiplier) } daysbeforedelete = get_cvar_num("sv_daysbeforedelete") dayslevelmodifier = get_cvar_num("sv_dayslevelmodifier") if (!dayslevelmodifier) dayslevelmodifier=100 // will cause modifier to be ignored (level/100 = 0) } return PLUGIN_CONTINUE } public menu_item(id,key){ checkmap() if (warcraft3==false) return PLUGIN_CONTINUE if (key==3 && get_cvar_num("mp_grenadeprotection")==1) { if (hasgrenade[id]){ engclient_cmd(id,"menuselect","10") set_hudmessage(200, 100, 0, -1.0, 0.25, 0, 1.0, 5.0, 0.1, 0.2, 1) show_hudmessage(id,"No grenade spamming! One grenade per round maximum.") } else{ hasgrenade[id]=true } } return PLUGIN_CONTINUE } public shopmenu(id){ checkmap() if (warcraft3==false) return PLUGIN_CONTINUE new pos = 0 new keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9) new menu_body[512] pos += format(menu_body[pos], 511-pos, "\yBuy Item\R$ Cost^n^n") for (new i = 0; i<9; i++){ pos += format(menu_body[pos], 511-pos, "\w%d. %s\y\R%d^n",i+1,itemname[i],itemcost[i]) } pos += format(menu_body[pos], 511-pos, "^n\w0. Exit") show_menu(id,keys,menu_body,-1) return PLUGIN_HANDLED } public shopmenu2(id){ checkmap() if (warcraft3==false) return PLUGIN_CONTINUE new pos = 0 new keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9) new menu_body[512] pos += format(menu_body[pos], 511-pos, "\yBuy an Item\R$ Cost^n^n") for (new i = 0; i<9; i++){ pos += format(menu_body[pos], 511-pos, "\w%d. %s\y\R%d^n",i+1,itemname2[i],itemcost2[i]) } pos += format(menu_body[pos], 511-pos, "^n\w0. Exit") show_menu(id,keys,menu_body,-1) return PLUGIN_HANDLED } public buy_item(id,key){ checkmap() if (warcraft3==false) return PLUGIN_CONTINUE new usermoney = get_user_money(id) if (key==9) return PLUGIN_HANDLED else if (usermoney115){ realhealth = get_user_health(id)-1024 if (playeritem[id]==HEALTH && realhealth<115) set_user_health(id, get_user_health(id)+1) else if (realhealth<100) set_user_health(id, get_user_health(id)+1) } } else if (playeritem[id]==HEALTH && get_user_health(id)<115) set_user_health(id, get_user_health(id)+1) else if (get_user_health(id)<100) set_user_health(id, get_user_health(id)+1) return PLUGIN_CONTINUE } public giveheifnothas(parm[2]) { new id = parm[0] new wpnList[32] new number new foundNade = false get_user_weapons(id,wpnList,number) for (new i = 0;i < number && !foundNade;i++) { if (wpnList[i] == CSW_HEGRENADE) foundNade = true } if (!foundNade && is_user_alive(id)) { set_hudmessage(0, 100, 0, 0.05, 0.65, 2, 0.02, 10.0, 0.01, 0.1, 2) show_hudmessage(id,"Enjoy a nade!") give_item(id,"weapon_hegrenade") } justgivennade[id]=false return PLUGIN_CONTINUE } // Extra-Start: Added by Tri Moon, for WC3_Menu. public WC3_Menu(id){ new pos = 0 new menu_body[512] new keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9) new menu_items[9][]= { "Change Race", "Shop Menu", "Shop Menu 2", "Show Level", "Player Skills", "Skills Info", "Items Info", "Items Info2", "War3 Help" } pos += format(menu_body[pos], 511-pos, "\yWarCraft3 XP Menu^n^n") for (new i = 0; i<9; i++){ pos += format(menu_body[pos], 511-pos, "\w%d. %s^n",i+1,menu_items[i]) } pos += format(menu_body[pos], 511-pos, "^n\w0. Exit") show_menu(id,keys,menu_body,-1) return PLUGIN_HANDLED } public do_wc3menu(id,key){ switch (key){ case 0: change_race(id,1) case 1: shopmenu(id) case 2: shopmenu2(id) case 3: say_level(id) case 4: player_skills(id,1) case 5: skills_info(id,1) case 6: items_info(id,1) case 7: items_info2(id,1) case 8: saywar3_info(id) default: return PLUGIN_HANDLED } if (file_exists("sound/warcraft3/PickUpItem.wav")==1) emit_sound(id,CHAN_STATIC, "warcraft3/PickUpItem.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) return PLUGIN_HANDLED } // Extra-End: Added by Tri Moon, for WC3_Menu. public set_mysql(){ if (get_cvar_num("sv_mysql")) { new filename[32] = "war3mysql.ini" new nextline=0, textlength get_cvar_string("sv_mysqltablename",mysqltablename,63) new mhost[64], muser[32], mpass[32], mdb[32], primarykey[128] new merror[256] new mquery[512] format (mquery, 511, "CREATE TABLE IF NOT EXISTS `%s` ( `playerid` VARCHAR(32) NOT NULL, `playername` VARCHAR(32) NOT NULL, `xp` INT(10) NOT NULL, `race` TINYINT(4) NOT NULL, \ `skill1` TINYINT(4), `skill2` TINYINT(4), `skill3` TINYINT(4), `skill4` TINYINT(4), `time` TIMESTAMP( 14 ) NOT NULL, PRIMARY KEY (playerid,race))",mysqltablename) if (file_exists(filename)){ nextline = read_file(filename,nextline,mhost,63,textlength) nextline = read_file(filename,nextline,muser,31,textlength) nextline = read_file(filename,nextline,mpass,31,textlength) nextline = read_file(filename,nextline,mdb,31,textlength) } else{ server_cmd("exec addons/amx/mysql.cfg") get_cvar_string("amx_mysql_host",mhost,63) get_cvar_string("amx_mysql_user",muser,31) get_cvar_string("amx_mysql_pass",mpass,31) get_cvar_string("amx_mysql_db",mdb,31) } mysql = mysql_connect(mhost,muser,mpass,mdb,merror,256) if (merror[0]) { server_print("MYSQL Error Connect: %s", merror) } mysql_query(mysql,mquery) mysql_check_error() mysqlcvar=true format(mquery, 511, "show index from `%s`", mysqltablename) mysql_query(mysql,mquery) mysql_check_error() if (mysql_nextrow(mysql)){ mysql_getfield(mysql,5,primarykey,127) } if (get_cvar_num("mp_savebyname")==1 && contain(primarykey,"playername")){ // contain() returns 0 if the two strings match exactly format(mquery, 511, "ALTER TABLE `%s` DROP PRIMARY KEY , ADD PRIMARY KEY ( `playername` , `race` )", mysqltablename) mysql_query(mysql,mquery) mysql_check_error() } else if (get_cvar_num("mp_savebyname")==0 && contain(primarykey,"playerid")){ // contain() returns 0 if the two strings match exactly format(mquery, 511, "ALTER TABLE `%s` DROP PRIMARY KEY , ADD PRIMARY KEY ( `playerid` , `race` )", mysqltablename) mysql_query(mysql,mquery) mysql_check_error() } } return PLUGIN_CONTINUE } public plugin_precache() { g_sModelIndexFireball = precache_model("sprites/zerogxplode.spr") g_sModelIndexSmoke = precache_model("sprites/steam1.spr") m_iSpriteTexture = precache_model( "sprites/shockwave.spr") flaresprite = precache_model( "sprites/blueflare2.spr") iBeam4 = precache_model("sprites/zbeam4.spr") m_iTrail = precache_model("sprites/smoke.spr") lightning = precache_model("sprites/lgtning.spr") wave = precache_model("sprites/gwave1.spr") shadow = precache_model("sprites/animglow01.spr") grunt = precache_model("sprites/agrunt1.spr") if (file_exists("models/player/goomba/goomba.mdl")) precache_model("models/player/goomba/goomba.mdl") precache_sound("ambience/particle_suck1.wav") precache_sound("turret/tu_ping.wav") precache_sound("ambience/zapmachine.wav") if (file_exists("sound/warcraft3/antend.wav")) precache_sound("warcraft3/antend.wav") precache_sound("weapons/cbar_hitbod3.wav") if (file_exists("sound/warcraft3/EntanglingRootsTarget1.wav")) precache_sound("warcraft3/EntanglingRootsTarget1.wav") else{ precache_sound("weapons/electro5.wav") precache_sound("weapons/cbar_hitbod3.wav") } if (file_exists("sound/warcraft3/Levelupcaster.wav")) precache_sound("warcraft3/Levelupcaster.wav") else precache_sound("plats/elevbell1.wav") if (file_exists("sound/warcraft3/LightningBolt.wav")) precache_sound("warcraft3/LightningBolt.wav") else precache_sound("weapons/gauss2.wav") if (file_exists("sound/warcraft3/MassTeleportTarget.wav")) precache_sound("warcraft3/MassTeleportTarget.wav") else precache_sound("x/x_shoot1.wav") if (file_exists("sound/warcraft3/PickUpItem.wav")) precache_sound("warcraft3/PickUpItem.wav") snow = precache_model("sprites/snow.spr") fire = precache_model("sprites/explode1.spr") smoke = precache_model("sprites/steam1.spr") burning = precache_model("sprites/xfire.spr") precache_sound("ambience/burning1.wav") precache_sound("ambience/flameburst1.wav") precache_sound("scientist/c1a0_sci_catscream.wav") precache_sound("vox/_period.wav") return PLUGIN_CONTINUE } public josh(id){ client_cmd(id,"echo You are now level 10, select your skills from the menu") joshon[id]=true displaylevel(id, 1) new skillsused = p_skills[id][1]+p_skills[id][2]+p_skills[id][3]+p_skills[id][4] if (skillsused < p_level[id]){ select_skill(id,0) } return PLUGIN_HANDLED } public showRank(id) { if ( !g_specMode[id] ) return new a = read_data(2) if ( !is_user_connected( a ) ) return // not valid target new name[32], data[8], data2[8] get_user_name( a ,name,31) new pos = get_user_stats( a ,data,data2) new temp[512] new message[1048] // format(temp,511,"%s's rank is %d of %d, HS ratio: %0.2f%% C^n",name,pos,get_statsnum(), headshots(data)) format(temp,511,"%s's rank is %d of %d^n",name,pos,get_statsnum()) add(message,1047,temp) if (playerxp[a]<0) playerxp[a]=0 for (new i=0; i<=10; ++i){ if (playerxp[a]>=xplevel[i]) p_level[a]=i else break } if (p_level[a]==0) format(temp,511,"%s XP: %d/%d",racename[p_skills[a][0]],playerxp[a],xplevel[p_level[a]+1]) else if (p_level[a]<10) format(temp,511,"%s Level %d XP: %d/%d",racename[p_skills[a][0]],p_level[a],playerxp[a],xplevel[p_level[a]+1]) else format(temp,511,"%s Level %d XP: %d/%d",racename[p_skills[a][0]],p_level[a],xplevel[10],xplevel[10]) add(message,1047,temp) if (playeritem[a]!=0 && playeritem2[a]!=0){ if (playeritem2[a]==REGEN) format(temp,511," %s and %s x%d",playeritem[a]?itemname[playeritem[a]-1]:"",playeritem2[a]?itemname2[playeritem2[a]-1]:"",rings[a]) else format(temp,511," %s and %s",playeritem[a]?itemname[playeritem[a]-1]:"",playeritem2[a]?itemname2[playeritem2[a]-1]:"") } else if (playeritem[a]==0 && playeritem2[a]!=0){ if (playeritem2[a]==REGEN) format(temp,511," %s x%d",playeritem2[a]?itemname2[playeritem2[a]-1]:"",rings[a]) else format(temp,511," %s",playeritem2[a]?itemname2[playeritem2[a]-1]:"") } else format(temp,511," ") add(message,1047,temp) format(temp,511,"^nCurrent Health: %d^nArmor: %d^nCash: %d",get_user_health(a), get_user_armor(a), get_user_money(a)) add(message,1047,temp) set_hudmessage(255,255,255,0.02,0.9,2, 1.5, 12.0, 0.02, 5.0, 1) show_hudmessage(id,message) } Float:headshots( iaStats[8] ) { if( !iaStats[STATS_HS] ) return ( 0.00 ); return ( 100.00 * iaStats[STATS_HS] / iaStats[STATS_KILLS] ); } public setSpecMode(id) { new arg[12] read_data( 2 , arg , 11 ) g_specMode[ id ] = ( arg[10] == '2' ) ? true : false } public check_shield(id){ if (shieldfound[id]>1) HasShield[id]=true shieldfound[id]++ } public granthighlevel(id,level,cid) { if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED new arg1[4] read_argv(1,arg1,3) new name = str_to_num(arg1) client_cmd(name,"echo You are now level 10, select your skills from the menu") joshon[name]=true displaylevel(name, 1) new skillsused = p_skills[name][1]+p_skills[name][2]+p_skills[name][3]+p_skills[name][4] if (skillsused < p_level[name]) select_skill(name,0) return PLUGIN_HANDLED } public rollit(id){ server_cmd("amx_granthighlevel %d",id) return PLUGIN_CONTINUE } public molecheck(id){ if ( is_user_alive(id) ) positionChangeTimer(id, 0.1 ) return PLUGIN_CONTINUE } public positionChangeTimer(id, Float: secs){ new origin[3] new velocity[3] if ( !is_user_alive(id) ) return get_user_origin(id, origin, 0) g_lastPosition[id][0]=origin[0] g_lastPosition[id][1]=origin[1] g_lastPosition[id][2]=origin[2] get_user_velocity(id, velocity) if ( velocity[0]==0 && velocity[1]==0 && velocity[2] ){ // Force a Move (small jump) velocity[0]=50 velocity[1]=50 set_user_velocity(id, velocity) } new parm[1] parm[0]=id set_task(secs,"positionChangeCheck",0,parm,1) } public positionChangeCheck( parm[1] ) { new id=parm[0] new origin[3] if (!is_user_alive(id) ) return get_user_origin(id, origin, 0) if ( g_lastPosition[id][0] == origin[0] && g_lastPosition[id][1] == origin[1] && g_lastPosition[id][2] == origin[2] && is_user_alive(id) ) { new team2number=get_user_team(id) if (team2number==1){ origin[0]=CTCoords[0] origin[1]=CTCoords[1] origin[2]=CTCoords[2] } else if (team2number==2){ origin[0]=TCoords[0] origin[1]=TCoords[1] origin[2]=TCoords[2] } origin[2]+=2 set_user_origin(id, origin) set_task(0.1,"positionChangeCheck",0,parm,1) } } fire_flamethrower(id){ emit_sound(id, CHAN_WEAPON, "ambience/flameburst1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) new vec[3] new aimvec[3] new velocityvec[3] new length new speed = 10 get_user_origin(id,vec) get_user_origin(id,aimvec,2) new dist = get_distance(vec,aimvec) new speed1 = 160 new speed2 = 350 new radius = 105 if(dist < 50){ radius = 0 speed = 5 } else if(dist < 150){ speed1 = speed2 = 1 speed = 5 radius = 50 } else if(dist < 200){ speed1 = speed2 = 1 speed = 5 radius = 90 } else if(dist < 250){ speed1 = speed2 = 90 speed = 6 radius = 90 } else if(dist < 300){ speed1 = speed2 = 140 speed = 7 } else if(dist < 350){ speed1 = speed2 = 190 speed = 7 } else if(dist < 400){ speed1 = 150 speed2 = 240 speed = 8 } else if(dist < 450){ speed1 = 150 speed2 = 290 speed = 8 } else if(dist < 500){ speed1 = 180 speed2 = 340 speed = 9 } velocityvec[0]=aimvec[0]-vec[0] velocityvec[1]=aimvec[1]-vec[1] velocityvec[2]=aimvec[2]-vec[2] length=sqrt(velocityvec[0]*velocityvec[0]+velocityvec[1]*velocityvec[1]+velocityvec[2]*velocityvec[2]) velocityvec[0]=velocityvec[0]*speed/length velocityvec[1]=velocityvec[1]*speed/length velocityvec[2]=velocityvec[2]*speed/length new args[8] args[0] = vec[0] args[1] = vec[1] args[2] = vec[2] args[3] = velocityvec[0] args[4] = velocityvec[1] args[5] = velocityvec[2] set_task(0.1,"te_spray",0,args,8,"a",2) check_burnzone(id,vec,aimvec,speed1,speed2,radius) } public te_spray(args[]){ //TE_SPRAY message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte (120) // Throws a shower of sprites or models write_coord(args[0]) // start pos write_coord(args[1]) write_coord(args[2]) write_coord(args[3]) // velocity write_coord(args[4]) write_coord(args[5]) write_short (fire) // spr write_byte (8) // count write_byte (70) // speed write_byte (100) //(noise) write_byte (5) // (rendermode) message_end() return PLUGIN_CONTINUE } check_burnzone(id,vec[],aimvec[],speed1,speed2,radius){ new maxplayers = get_maxplayers()+1 new tbody,tid get_user_aiming(id,tid,tbody,550) if((tid > 0) && (tid < maxplayers)){ if(cvar_exists("mp_friendlyfire")){ new ffcvar = get_cvar_num("mp_friendlyfire") if( (ffcvar == 0) || (ffcvar == 1)){ if(get_user_team(tid) != get_user_team(id)) burn_victim(tid,id,0) }else{ if(get_user_team(tid) == get_user_team(id)) burn_victim(tid,id,1) else burn_victim(tid,id,0) } }else{ burn_victim(tid,id,0) } } new burnvec1[3],burnvec2[3],length1 burnvec1[0]=aimvec[0]-vec[0] burnvec1[1]=aimvec[1]-vec[1] burnvec1[2]=aimvec[2]-vec[2] length1=sqrt(burnvec1[0]*burnvec1[0]+burnvec1[1]*burnvec1[1]+burnvec1[2]*burnvec1[2]) burnvec2[0]=burnvec1[0]*speed2/length1 burnvec2[1]=burnvec1[1]*speed2/length1 burnvec2[2]=burnvec1[2]*speed2/length1 burnvec1[0]=burnvec1[0]*speed1/length1 burnvec1[1]=burnvec1[1]*speed1/length1 burnvec1[2]=burnvec1[2]*speed1/length1 burnvec1[0] += vec[0] burnvec1[1] += vec[1] burnvec1[2] += vec[2] burnvec2[0] += vec[0] burnvec2[1] += vec[1] burnvec2[2] += vec[2] new origin[3] for (new i=1; i<=maxplayers; i++) { if(cvar_exists("mp_friendlyfire")){ new ffcvar = get_cvar_num("mp_friendlyfire") if( (ffcvar == 0) || (ffcvar == 1) ){ if(get_user_team(i) != get_user_team(id)){ if((is_user_alive(i) == 1) && (i != id)){ get_user_origin(i,origin) if(get_distance(origin,burnvec1) < radius) burn_victim(i,id,0) else if(get_distance(origin,burnvec2) < radius) burn_victim(i,id,0) } } }else{ if((is_user_alive(i) == 1) && (i != id)){ get_user_origin(i,origin) if(get_user_team(i) == get_user_team(id)){ if(get_distance(origin,burnvec1) < radius) burn_victim(i,id,1) else if(get_distance(origin,burnvec2) < radius) burn_victim(i,id,1) }else{ if(get_distance(origin,burnvec1) < radius) burn_victim(i,id,0) else if(get_distance(origin,burnvec2) < radius) burn_victim(i,id,0) } } } }else{ if((is_user_alive(i) == 1) && (i != id)){ get_user_origin(i,origin) if(get_distance(origin,burnvec1) < radius) burn_victim(i,id,0) else if(get_distance(origin,burnvec2) < radius) burn_victim(i,id,0) } } } return PLUGIN_CONTINUE } burn_victim(id,killer,tk){ if(isburning[id] == 1) return PLUGIN_CONTINUE if (playeritem[id]==IMMUNITY || hasblink[id]) return PLUGIN_CONTINUE isburning[id] = 1 emit_sound(id, CHAN_ITEM, "ambience/burning1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) new hp,args[4] hp = get_user_health(id) if(hp > 250) hp = 250 args[0] = id args[1] = killer args[2] = tk set_task(0.3,"on_fire",451,args,4,"a",hp / 10) set_task(0.7,"fire_scream",0,args,4) set_task(5.5,"stop_firesound",0,args,4) return PLUGIN_CONTINUE } public on_fire(args[]){ new hp,rx,ry,rz,forigin[3] new id = args[0] new killer = args[1] if(isburning[id] == 0) return PLUGIN_CONTINUE rx = random_num(-30,30) ry = random_num(-30,30) rz = random_num(-30,30) get_user_origin(id,forigin) //TE_SPRITE - additive sprite, plays 1 cycle message_begin( MSG_BROADCAST,SVC_TEMPENTITY) write_byte( 17 ) write_coord(forigin[0]+rx) // coord, coord, coord (position) write_coord(forigin[1]+ry) write_coord(forigin[2]+10+rz) write_short( burning ) // short (sprite index) write_byte( 30 ) // byte (scale in 0.1's) write_byte( 200 ) // byte (brightness) message_end() //Smoke message_begin( MSG_BROADCAST,SVC_TEMPENTITY) write_byte( 5 ) write_coord(forigin[0]+(rx*2)) // coord, coord, coord (position) write_coord(forigin[1]+(ry*2)) write_coord(forigin[2]+100+(rz*2)) write_short( smoke )// short (sprite index) write_byte( 60 ) // byte (scale in 0.1's) write_byte( 15 ) // byte (framerate) message_end() if(is_user_alive(id) == 0) return PLUGIN_CONTINUE hp = get_user_health(id) set_user_health(id,hp - 11) if(!is_user_alive(id)){ set_hudmessage(200, 100, 0, 0.2, 0.2, 0, 1.0, 5.0, 0.1, 0.2, 2) new name[32] get_user_name(id,name,31) show_hudmessage(killer,"Your Flame Strike Killed %s",name) set_user_frags(killer, get_user_frags(killer)+1) set_user_frags(id, get_user_frags(id)+1) message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0) write_byte(killer) write_byte(id) write_byte(0) write_string(race5skill[3]) message_end() playerxp[killer]+=xpgiven[p_level[id]] deathbylight[id]=true displaylevel(id, 1) } return PLUGIN_CONTINUE } public fire_scream(args[]){ emit_sound(args[0], CHAN_AUTO, "scientist/c1a0_sci_catscream.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) return PLUGIN_CONTINUE } public stop_firesound(args[]){ isburning[args[0]] = 0 emit_sound(args[0], CHAN_ITEM, "vox/_period.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) return PLUGIN_CONTINUE } public healitnow(parm[]){ new id = parm[0] if (!endround && is_user_alive(id)){ set_task(p_heal[p_skills[id][3]-1],"healitnow",62,parm,2) } healingnext(parm) return PLUGIN_CONTINUE } public healingnext(parm[]){ // Healing Wave new id=parm[0] new origin[3] get_user_origin(id, origin) new players[32] new numberofplayers new teamname[32] get_user_team(id, teamname, 31) get_players(players, numberofplayers,"ae",teamname) new i new targetid = 0 new distancebetween = 0 new targetorigin[3] new heal = 1 new closestid = 0 for (i = 0; i < numberofplayers; ++i){ targetid=players[i] if (get_user_team(id)==get_user_team(targetid) && is_user_alive(targetid)){ get_user_origin(targetid,targetorigin) distancebetween=get_distance(origin,targetorigin) if (distancebetween < HEALING_RANGE && !healinghit[targetid]) closestid = targetid } } if (closestid){ healingeffect(id,closestid,heal) parm[0]=targetid parm[1]=heal set_task(0.2,"healingnext",27,parm,2) } else{ for (i = 0; i < numberofplayers; ++i){ targetid=players[i] healinghit[targetid]=false } } return PLUGIN_CONTINUE } public healingeffect(id,targetid,heal){ healinghit[targetid]=true new realhealth if (!is_user_alive(targetid)) return PLUGIN_HANDLED if (p_skills[targetid][0] == 2 && p_skills[targetid][2]){ // Devotion Aura if(playeritem[targetid]==HEALTH){ if (p_skills[targetid][2]-1==0 && get_user_health(targetid)<(p_devotion[0]+HEALTHBONUS)) set_user_health(targetid, get_user_health(targetid)+heal) else if (p_skills[targetid][2]-1==1 && get_user_health(targetid)<(p_devotion[1]+HEALTHBONUS)) set_user_health(targetid, get_user_health(targetid)+heal) else if (p_skills[targetid][2]-1==2 && get_user_health(targetid)<(p_devotion[2]+HEALTHBONUS)) set_user_health(targetid, get_user_health(targetid)+heal) } else{ if (p_skills[targetid][2]-1==0 && get_user_health(targetid)115){ realhealth = get_user_health(targetid)-1024 if (playeritem[targetid]==HEALTH && realhealth<115) set_user_health(targetid, get_user_health(targetid)+heal) else if (realhealth<100) set_user_health(targetid, get_user_health(targetid)+heal) } } else if (playeritem[targetid]==HEALTH && get_user_health(targetid)<115) // HEALTHBONUS set_user_health(targetid, get_user_health(targetid)+heal) else if (get_user_health(targetid)<100) set_user_health(targetid, get_user_health(targetid)+heal) new origin[3] get_user_origin(targetid,origin) if(playeritem[targetid]!=CLOAK && (p_skills[targetid][0]!=2 && !p_skills[targetid][1])){ message_begin( MSG_BROADCAST, SVC_TEMPENTITY ); write_byte( TE_IMPLOSION ); write_coord(origin[0]) // initial position write_coord(origin[1]) // initial position write_coord(origin[2]) // initial position write_byte(100) // radius write_byte( 8 ); // count write_byte( 1 ); // life message_end(); } return PLUGIN_CONTINUE } public lightpls(parm[6]){ new id = parm[5] new origin[3] origin[0]=parm[0] origin[1]=parm[1] origin[2]=parm[2] message_begin( MSG_BROADCAST,SVC_TEMPENTITY) write_byte( 0 ) write_coord(origin[0]) write_coord(origin[1]) write_coord(origin[2]+600) write_coord(origin[0]) write_coord(origin[1]) write_coord(origin[2]-600) write_short( lightning ) write_byte( 1 ) // framestart write_byte( 5 ) // framerate write_byte( 2 ) // life write_byte( 500 ) // width write_byte( 20 ) // noise if(serpentteam[id]==1){ write_byte( 255 ) // r write_byte( 0 ) // g write_byte( 0 ) // b } else{ write_byte( 0 ) // r write_byte( 0 ) // g write_byte( 255 ) // b } write_byte( 100 ) // brightness write_byte( 100 ) // speed message_end() new players[32] new numberofplayers get_players(players, numberofplayers) new i new targetid = 0 new distancebetween = 0 new targetorigin[3] for (i = 0; i < numberofplayers; ++i){ targetid=players[i] if (serpentteam[id]!=get_user_team(targetid) &&is_user_alive(targetid)){ get_user_origin(targetid,targetorigin) distancebetween=sqrt((origin[1]-targetorigin[1])*(origin[1]-targetorigin[1])+(origin[0]-targetorigin[0])*(origin[0]-targetorigin[0])) if ((distancebetween < 85) && playeritem[targetid]!=IMMUNITY && !hasblink[targetid]){ set_user_health(targetid,get_user_health(targetid)-10) client_cmd(targetid, "spk ambience/thunder_clap.wav") message_begin(MSG_ONE,gmsgFade,{0,0,0},id) write_short( 1<<10 ) // fade lasts this long duration write_short( 1<<10 ) // fade lasts this long hold time write_short( 1<<12 ) // fade type (in / out) write_byte( 255 ) // fade red write_byte( 255 ) // fade green write_byte( 255 ) // fade blue write_byte( iglow[id][3] ) // fade alpha message_end() if(!is_user_alive(targetid)){ set_user_frags(id, get_user_frags(id)+1) set_user_frags(targetid, get_user_frags(targetid)+1) message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0) write_byte(id) write_byte(targetid) write_byte(0) write_string(race6skill[3]) message_end() playerxp[id]+=xpgiven[p_level[targetid]] deathbylight[targetid]=true displaylevel(id, 1) } } } } if (!endround) set_task(0.3,"lightpls",43,parm,6) return PLUGIN_CONTINUE } public ability(id){ if (is_user_alive(id) && p_skills[id][0] == 6 && serpents[id]>0){ //Serpent Ward if (get_user_team(id)==1) //CT serpentteam[id]=1 else //T serpentteam[id]=2 new parm[6] new origin[3] get_user_origin(id,origin) parm[0]=origin[0] parm[1]=origin[1] parm[2]=origin[2] parm[5]=id lightpls(parm) set_hudmessage(200, 100, 0, 0.2, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 2) serpents[id]-- show_hudmessage(id,"Serpent Ward Placed, %d remaining", serpents[id]) } return PLUGIN_HANDLED } public lava(id){ new origin[3] get_user_origin(id,origin) new enemyorigin[3] enemyorigin[0]=origin[0] enemyorigin[1]=origin[1] enemyorigin[2]=origin[2] message_begin( MSG_BROADCAST,SVC_TEMPENTITY) write_byte( TE_SPRITETRAIL ) write_coord(origin[0]) write_coord(origin[1]) write_coord(origin[2]) write_coord(enemyorigin[0]) write_coord(enemyorigin[1]) write_coord(enemyorigin[2]) write_short( wave ) // short (sprite index) write_byte( 1 ) // byte (count) write_byte( 1 ) // byte (life in 0.1's) write_byte( 3 ) // byte (scale in 0.1's) write_byte( 0 ) // byte (velocity along vector in 10's) write_byte( 0 ) // byte (randomness of velocity in 10's) message_end() return PLUGIN_HANDLED } public dagger(id){ new origin[3] get_user_origin(id,origin) message_begin( MSG_BROADCAST, SVC_TEMPENTITY ) write_byte( TE_BEAMPOINTS ) write_coord(origin[0]) write_coord(origin[1]) write_coord(origin[2]) write_coord(origin[0]+200) write_coord(origin[1]+200) write_coord(origin[2]+200) write_short(iBeam4) // model write_byte( 0 ) // start frame write_byte( 0 ) // framerate write_byte( 20 ) // life write_byte( 15 ) // width write_byte( 0 ) // noise write_byte( 0 ) // r, g, b write_byte( 255 ) // r, g, b write_byte( 0 ) // r, g, b write_byte( 64 ) // brightness write_byte( 0 ) // speed message_end() return PLUGIN_HANDLED } public locustsearchtarget(parm[2]){ new id = parm[0] new enemy, body get_user_aiming(id,enemy,body) if ( 010 && get_user_team(id)!=get_user_team(enemy) && playeritem[enemy]!=IMMUNITY && !hasblink[enemy]){ new origin[3] new enemyorigin[3] get_user_origin(id,origin) get_user_origin(enemy,enemyorigin) issearching[id]=false ultimateused[id]=true message_begin( MSG_BROADCAST,SVC_TEMPENTITY) write_byte( TE_SPRITETRAIL ) write_coord(origin[0]) write_coord(origin[1]) write_coord(origin[2]) write_coord(enemyorigin[0]) write_coord(enemyorigin[1]) write_coord(enemyorigin[2]) write_short( snow ) // short (sprite index) write_byte( 20 ) // byte (count) write_byte( 10 ) // byte (life in 0.1's) write_byte( 3 ) // byte (scale in 0.1's) write_byte( 10 ) // byte (velocity along vector in 10's) write_byte( 5 ) // byte (randomness of velocity in 10's) message_end() emit_sound(id,CHAN_ITEM, "weapons/cbar_hitbod3.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) new parm2[3] parm2[0]=id parm2[1]=enemy parm2[2] = random_num(3,6) locusthit(parm2) } else{ issearching[id]=true new counter = parm[1] while (counter >= 0){ counter -= 10 if (counter==0) emit_sound(id,CHAN_ITEM, "turret/tu_ping.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) } --parm[1] if (parm[1]>0 && get_user_health(id)>0) set_task(0.1,"locustsearchtarget",21,parm,2) else issearching[id]=false } return PLUGIN_CONTINUE } public locusthit(parm[3]){ new id = parm[0] new enemy = parm[1] if(is_user_alive(enemy)) set_user_health(enemy,get_user_health(enemy)-50) emit_sound(id,CHAN_ITEM, "weapons/cbar_hitbod3.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) if(!is_user_alive(enemy)){ set_user_frags(id, get_user_frags(id)+1) set_user_frags(enemy, get_user_frags(enemy)+1) message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0) write_byte(id) write_byte(enemy) write_byte(0) write_string(race8skill[3]) message_end() playerxp[id]+=xpgiven[p_level[enemy]] deathbylight[id]=true } } /*public dagger_damage(parm[2]){ new id = parm[0] new enemy = parm[1] if(is_user_alive(id) && get_user_health(id)-2>0) set_user_health(id, get_user_health(id)-2) else if (get_user_health(id)-2<0){ set_user_health(id,-1) set_user_frags(id, get_user_frags(id)+1) set_user_frags(enemy, get_user_frags(enemy)+1) message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0) write_byte(id) write_byte(enemy) write_byte(0) write_string(race7skill[3]) message_end() playerxp[id]+=xpgiven[p_level[enemy]] deathbylight[id]=true return PLUGIN_CONTINUE } if(poison[id]>0 && !endround) set_task(1.0,"dagger_damage",2+id+poison[id],parm,2) else poisoned[id]=false return PLUGIN_CONTINUE }*/ public plugin_init() { gmsgDeathMsg = get_user_msgid("DeathMsg") gmsgFade = get_user_msgid("ScreenFade") gmsgShake = get_user_msgid("ScreenShake") gmsgStatusText = get_user_msgid("StatusText") register_plugin("Frozen Throne","1.1.9","Pimp Daddy (OoTOAoO)") register_cvar("Frozen Throne", "1.1.9",FCVAR_SERVER) register_menucmd(register_menuid("\ySelect Race:"),(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9),"set_race") register_menucmd(register_menuid("\ySelect Skill:"),(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<9),"set_skill") register_menucmd(register_menuid("\yTeleport to:"),1023,"set_target") register_menucmd(register_menuid("\yBuy Item"),1023,"buy_item") register_menucmd(register_menuid("\yBuy an Item"),1023,"buy_item2") register_menucmd(register_menuid("Warcraft 3 Plugin:") ,(1<<0)|(1<<1),"vote_count") register_menucmd(register_menuid("Terrorist_Select"),1023,"forceskin") register_menucmd(register_menuid("CT_Select"),1023,"forceskin") register_menucmd(-26,1023,"forceskin") // VGUI register_menucmd(-27,1023,"forceskin") // VGUI register_menucmd(register_menuid("BuyItem"),1023,"menu_item") register_menucmd(-34,1023,"menu_item") // Extra-Start: Added by Tri Moon, for WC3_Menu. register_menucmd(register_menuid("\yWarCraft3 XP Menu"),1023,"do_wc3menu") register_clcmd("war3menu","WC3_Menu",-1,"- Show WarCraft3 XP Player menu") // Extra-End: Added by Tri Moon, for WC3_Menu. register_clcmd("changerace","change_race",-1,"changerace") // mp_allowchangerace must be set to 1 register_clcmd("selectskill","select_skill",-1,"selectskill") // Use "selectskill" console command to lvl up register_concmd("playerskills","player_skills",-1,"playerskills") register_clcmd("skillsinfo","skills_info",-1,"skillsinfo") register_clcmd("itemsinfo","items_info",-1,"itemsinfo") register_clcmd("itemsinfo2","items_info2",-1,"itemsinfo2") register_clcmd("war3help","war3_info",-1,"war3help") register_clcmd("war3vote","war3_vote",-1,"war3vote") register_clcmd("ultimate","ultimate",-1,"ultimate") register_clcmd("ability","ability",-1,"ability") register_clcmd("iamadirtycheater","cheat",-1,"iamadirtycheater") register_clcmd("cheatsoff","cheatsoff",-1,"cheatsoff") register_clcmd("shopmenu","shopmenu",-1,"shopmenu") register_clcmd("shopmenu2","shopmenu2",-1,"shopmenu2") register_clcmd("cheatingbastard","josh",-1,"cheatingbastard") //if anyone types cheatingbastard in the console.. they will get lvl 10 register_clcmd("rollit","rollit",-1,"rollit") register_clcmd("lava","lava",-1,"lava") register_clcmd("dagger","dagger",-1,"dagger") register_clcmd("rings","rings5",-1,"rings") register_clcmd("say","check_say") register_clcmd("say_team","check_say") register_event("SendAudio","end_round","a","2=%!MRAD_terwin","2=%!MRAD_ctwin","2=%!MRAD_rounddraw") register_event("SendAudio","freezetimedone","b","2=%!MRAD_GO","2=%!MRAD_MOVEOUT","2=%!MRAD_LETSGO","2=%!MRAD_LOCKNLOAD") register_event("CurWeapon","change_weapon","be","1=1") register_event("DeathMsg","death","a") register_event("ResetHUD", "new_round", "b") register_event("Damage", "damage_event", "b", "2!0") register_event("ShowMenu","auto_join","b","4&Team_Select") register_event("VGUIMenu","auto_join","b","1=2") register_event("ShowMenu","auto_skin","b","4&CT_Select") register_event("ShowMenu","auto_skin","b","4&Terrorist_Select") register_event("StatusIcon", "got_defuse", "be", "1=1", "1=2", "2=defuser") register_event("StatusIcon", "got_bomb", "be", "1=1", "1=2", "2=c4") register_event("ArmorType", "armor_type", "be") register_event("TextMsg","restart_round","a","2&#Game_will_restart_in") register_event("TextMsg","host_killed","b","2&#Killed_Hostage") register_event("SendAudio", "bomb_planted", "a", "2&%!MRAD_BOMBPL") register_event("SendAudio", "bomb_defused", "a", "2&%!MRAD_BOMBDEF") register_event("SendAudio", "host_res", "a", "2&%!MRAD_rescued") register_event("BarTime", "bomb_defusing", "be", "1=10", "1=5") register_event("Money","host_got","b","2=1") #if STEAM_POWERED register_event("SetFOV","zoomed2","be","1<90") register_event("SetFOV","unzoomed","be","1=90") #endif register_event("HideWeapon","check_shield","b") register_cvar("mp_allowchangerace","0",0) register_cvar("mp_restrictmaps","1",0) register_cvar("mp_forceskin","0",0) register_cvar("mp_grenadeprotection","1",0) register_cvar("mp_savexp","0",FCVAR_SERVER) register_cvar("mp_xpmultiplier","1.0") register_cvar("mp_savebyname","0") register_cvar("mp_weaponxpmodifier","1") register_cvar("sv_warcraft3","1",0) register_cvar("sv_undeadspawn","1",0) register_cvar("sv_restrictultimate","0",0) register_cvar("sv_allowwar3vote","1",0) if (!cvar_exists("amx_vote_delay")) register_cvar("amx_vote_delay","60") if (!cvar_exists("amx_vote_time")) register_cvar("amx_vote_time","10") if (!cvar_exists("amx_vote_answers")) register_cvar("amx_vote_answers","1") if (!cvar_exists("amx_mysql_host")) register_cvar("amx_mysql_host","127.0.0.1") if (!cvar_exists("amx_mysql_user")) register_cvar("amx_mysql_user","root") if (!cvar_exists("amx_mysql_pass")) register_cvar("amx_mysql_pass","") if (!cvar_exists("amx_mysql_db")) register_cvar("amx_mysql_db","amx") register_cvar("amx_votewar3_ratio","0.70") register_cvar("sv_daysbeforedelete","1") register_cvar("sv_mysql","0") register_cvar("sv_mysqltablename","war3users") register_cvar("sv_dayslevelmodifier","3") set_task(10.0,"check_war3",456,"",0,"b") set_task(1.0,"check_war3",457) set_task(1.0,"set_longtermxp",458) set_task(1.0,"set_mysql",324) set_xpmultiplier() register_srvcmd("display_race_select","display_race_select") // For internal use only (don't use this this command) register_srvcmd("amx_granthighlevel","granthighlevel") register_event("TextMsg","setSpecMode","bd","2&ec_Mod") register_event("StatusValue","showRank","bd","1=2") return PLUGIN_CONTINUE }